我有一个嵌套的视图模型结构:
public class PersonViewModel
{
public int Height { get; set; }
public List<LegViewModel> Legs {get;set;}
}
public class LegViewModel
{
public int Length { get; set; }
}
我使用jquery post发送了一些JSON:
<script>
$(function () {
$("#mybutton").click(function () {
$.ajax({
type: "POST",
data: {
Height: 23,
Legs: [
{
Length: 45,
}
]
}
});
});
});
</script>
<button id="mybutton">hello world!</button>
我发布到此控制器操作:
[HttpPost]
public ActionResult Save(PersonViewModel model)
{
return Json(new { success = true });
}
Height
的{{1}}被填充,PersonViewModel
列表中的元素的数量,以及Legs
中的每个LegViewModel
list不会:Length
属性保持为0,我希望Legs
数组包含一个Length
45的元素。
请注意,当我根本不使用列表时,这也是相同的:具有以下内容会产生非空PersonViewModel.Legs property, but still as the
Legs.Length`属性为0:
// view model
public class PersonViewModel
{
public int Height { get; set; }
//public List<LegViewModel> Legs {get;set;}
public LegViewModel Leg { get; set; }
}
public class LegViewModel
{
public int Length { get; set; }
}
// view
$("#mybutton").click(function () {
$.ajax({
type: "POST",
data: {
Height: 23,
Leg:
{
Length: 45,
}
}
});
})
如何使用JSON填充嵌套视图模型?有没有我错过的东西或者MVC不能做到这一点?
答案 0 :(得分:1)
如果您希望MVC Model Binder在使用$.ajax
发送数据时正确解析您的集合,您需要做两件事:
contentType
设置为'application/json'
data
应该保留JSON,以便JSON.stringify
数据所以这是正确的用法,然后可以由模型绑定器解析:
$("#mybutton").click(function () {
$.ajax({
type: "POST",
contentType: 'application/json',
data: JSON.stringify({
Height: 23,
Legs: [
{
Length: 45,
}
]
})
});
});