2016-02-19 44 views
1

当我单击按钮以获取用户信息以填充文本框时,我遇到了永久500错误消息。我已经尝试了很多东西来弄清楚,但我非常难以忍受这一点,任何帮助将不胜感激。MVC 5获取用户详细信息时出现错误,并在点击文本框中填充时出错

enter image description here

UserController.cs

using System; 
using System.Web.Mvc; 
using SampleMvc.Domain; 
using SampleMvc.Models; 
using SampleMvc.Repository; 

namespace SampleMvc.Controllers 
{ 
    public class UserController : Controller 
    { 
     private readonly IUserRepository _userRepository; 

     public UserController() 
     { 
      _userRepository = new UserRepository(); 
     } 

     public UserController(IUserRepository userRepository) 
     { 
      _userRepository = userRepository; 
     } 

     public ActionResult UserDetails() 
     { 
      UserModel model = new UserModel(); 
      return View(model); 
     } 

     public JsonResult PopulateDetails(UserModel model) 
     { 
      UserResultModel userResultModel = new UserResultModel(); 
      if (String.IsNullOrEmpty(model.UserId)) 
      { 
       userResultModel.Message = "UserId can not be blank"; 
       return Json(userResultModel); 
      } 

      User user = _userRepository.GetUser(model.UserId); 

      if (user == null) 
      { 
       userResultModel.Message = String.Format("No UserId found for {0}", model.UserId); 
       return Json(userResultModel); 
      } 
      userResultModel.LastName = user.LastName; 
      userResultModel.FirstName = user.FirstName; 
      userResultModel.Message = String.Empty; //success message is empty in this case 

      return Json(userResultModel); 
     } 
    } 

    public class UserResultModel 
    { 
     public string LastName { get; set; } 
     public string FirstName { get; set; } 
     public string Message { get; set; } 
    } 
} 

UserModel.cs

namespace SampleMvc.Models 
{ 
    public class UserModel 
    { 
     public string UserId { get; set; } 
     public string LastName { get; set; } 
     public string FirstName { get; set; } 
    } 
} 

UserDetails.Cshtml

@{ 
    ViewBag.Title = "UserDetails"; 
} 

<link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 


<script type="text/javascript"> 

    function populateUserDetails() { 
     var user = {}; 
     user.UserId = $("#UserId").val(); 
     $.getJSON("PopulateDetails", user, updateFields); 
     //$.post("PopulateDetails", user, updateFields, 'json'); 
    }; 

    updateFields = function (data) { 
     $("#LastName").val(data.LastName); 
     $("#FirstName").val(data.FirstName); 
     $("#Message").html(data.Message); 
    }; 
</script> 


@using (Html.BeginForm()) 
{ 
    <div> 
     <fieldset> 
      <legend>User Details</legend> 
      <p> 
       <label for="UserId">UserId:</label> 
       @Html.TextBox("UserId") 
       <input type="button" id="GetUser" value="Populate User Details" onclick='populateUserDetails()' /> 
      </p> 
      <p> 
       <label for="LastName">LastName:</label> 
       @Html.TextBox("LastName") 
      </p> 
      <p> 
       <label for="FirstName">FirstName:</label> 
       @Html.TextBox("FirstName") 
      </p> 
     </fieldset> 
    </div> 
} 

域夹User.cs

namespace SampleMvc.Domain 
{ 
    public class User 
    { 
     public string UserId { get; set; } 
     public string LastName { get; set; } 
     public string FirstName { get; set; } 
     public int Age { get; set; } 
    } 
} 

Repository文件夹IUserRepository.cs

using SampleMvc.Domain; 

namespace SampleMvc.Repository 
{ 
    public interface IUserRepository 
    { 
     User GetUser(string userId); 
    } 
} 

Repository文件夹UserRepository.cs

using System.Collections.Generic; 
using System.Linq; 
using SampleMvc.Domain; 

namespace SampleMvc.Repository 
{ 
    public class UserRepository : IUserRepository 
    { 
     #region IUserRepository Members 

     public User GetUser(string userId) 
     { 
      return Database.Users.Where(user => user.UserId == userId).FirstOrDefault(); 
     } 

     #endregion 
    } 

    public class Database 
    { 
     public static List<User> Users = new List<User> 
              { 
               new User 
                { 
                 UserId = "john_doe", 
                 LastName = "Doe", 
                 FirstName = "John", 
                 Age = 25 
                }, 
               new User 
                { 
                 UserId = "user2", 
                 LastName = "SomeLastName", 
                 FirstName = "SomeFirstNAme", 
                 Age = 28 
                }, 
              }; 
    } 
} 

修复感谢答案的变化

public JsonResult PopulateDetails(UserModel model) 
     { 
      UserResultModel userResultModel = new UserResultModel(); 
      if (String.IsNullOrEmpty(model.UserId)) 
      { 
       userResultModel.Message = "UserId can not be blank"; 
       return Json(userResultModel,JsonRequestBehavior.AllowGet); 
      } 

      User user = _userRepository.GetUser(model.UserId); 

      if (user == null) 
      { 
       userResultModel.Message = String.Format("No UserId found for {0}", model.UserId); 
       return Json(userResultModel,JsonRequestBehavior.AllowGet); 
      } 
      userResultModel.LastName = user.LastName; 
      userResultModel.FirstName = user.FirstName; 
      userResultModel.Message = String.Empty; //success message is empty in this case 

      return Json(userResultModel, JsonRequestBehavior.AllowGet); 
     } 
    } 

回答

0

您不能返回JSON d从这样的GET操作方法开始。这就是你得到500错误的原因。

每当您尝试从GET操作方法返回Json数据时,都需要传递JsonRequestBehavior.AllowGet作为第二个参数。如果你没有给这个参数传递任何值,它将采用默认值DenyGet,你会得到一个错误。

因此,在您的JSON方法中传递JsonRequestBehavior.AllowGet

public JsonResult PopulateDetails(UserModel model) 
{ 
    var userResultModel = new UserResultModel(); 
    userResultModel.FirstName = "Hard coded for demo"; 
    return Json(userResultModel ,JsonRequestBehavior.AllowGet); 
} 
+0

我仍然得到这样的错误 – Donny

+0

这可能是一些其他的错误。只需在新的浏览器中打开网址即可。如果您打开浏览器的网络选项卡,则可能会看到该网址。 – Shyju

+0

哦,等待它已修复 – Donny

相关问题