我想将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请求,通过其中“人”类的谢灵运匹配的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()请求中丢失了某些内容?
这工作!我认为关键部分是设置contentType。 –
我以前遇到过这个问题,这也是答案 - 对于成为工具感到抱歉。再次感谢您的帮助,亚瑟! –