我想将 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; }
}
这是我的 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>
我的 HomeController 看起来像这样:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult ShowPerson(Person person)
{
return View(person);
}
}
暂时忽略“ShowPerson.cshtml”文件,因为问题发生在需要之前。
在 HomeController.ShowPerson 动作中,“person.Name”属性被正确绑定,“person.JobTitle”对象(包含“Title”和“IsSenior”属性)被实例化,但仍具有“Title = null”的默认值和“IsSenior = false”。
我确定我过去已经毫无问题地完成了嵌套模型绑定。我错过了什么?任何人都可以解释为什么模型绑定似乎只能工作一层吗?
我已经搜索过了,似乎其他人在从表单发送数据时都遇到了绑定问题,所以也许我的 $.ajax() 请求中遗漏了一些东西?