Ric*_*h S 3 ajax model-binding asp.net-mvc-3
我想将JSON数据结构传递给MVC(3)控制器,将JSON对象转换为C#对象,并绑定所有属性.其中一个属性是简单类型.这是基本的模型绑定,对吧?
这是我的模特:
public class Person
{
public string Name { get; set; }
public JobTitle JobTitle { get; set; }
}
public class JobTitle
{
public string Title { get; set; }
public bool IsSenior { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的Index.cshtml页面(它发出一个AJAX请求,传入一个匹配"Person"类结构的JSON对象):
<div id="myDiv" style="border:1px solid #F00"></div>
<script type="text/javascript">
var person = {
Name: "Bob Smith",
JobTitle: {
Title: "Developer",
IsSenior: true
}
};
$.ajax({
url: "@Url.Action("ShowPerson", "Home")",
data: $.param(person),
success: function (response){
$("#myDiv").html(response);
},
error: function (xhr) {
$("#myDiv").html("<h1>FAIL</h1><p>" + xhr.statusText + "</p>");
}
});
</script>
Run Code Online (Sandbox Code Playgroud)
而我的HomeController看起来像这样:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult ShowPerson(Person person)
{
return View(person);
}
}
Run Code Online (Sandbox Code Playgroud)
暂时忽略"ShowPerson.cshtml"文件,因为问题发生之前需要它.
在HomeController.ShowPerson操作中,"person.Name"属性被正确绑定,"person.JobTitle"对象(包含"Title"和"IsSenior"属性)被实例化,但仍然具有默认值"Title = null"和"IsSenior =假".
我确信我在过去没有问题就完成了嵌套模型绑定.我错过了什么?任何人都可以解释为什么模型绑定似乎只能在一个层次上工作吗?
我搜索了SO,似乎其他人在从表单发送数据时遇到了绑定问题,所以也许我在$ .ajax()请求中遗漏了一些东西?
好的,你需要做一些改变,
jsonapplication/json; charset=utf-8.下面是修改后的代码.(测试过)
var person = {
Name: "Bob Smith",
JobTitle: {
Title: "Developer",
IsSenior: true
}
};
var jsonData = JSON.stringify(person);
$.ajax({
url: "@Url.Action("ShowPerson", "Home")",
data: jsonData,
dataType: 'json',
type: 'POST',
contentType: "application/json; charset=utf-8",
success: function (response){
$("#myDiv").html(response);
},
error: function (xhr) {
$("#myDiv").html("<h1>FAIL</h1><p>" + xhr.statusText + "</p>");
}
});
Run Code Online (Sandbox Code Playgroud)