1

我有一个嵌套的视图模型结构:

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 });
}

HeightaPersonViewModel被填充,列表中的元素数量Legs也是如此,但列表中的每个元素LegViewModel都没有:Length属性保持为 0,我希望Legs数组包含一个Length45 的元素。

请注意,当我根本不使用列表时,这也是相同的:具有以下内容会产生一个不为空的PersonViewModel.Legs property, but still as theLegs.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 不能做到这一点吗?

4

1 回答 1

1

如果您希望 MVC 模型绑定器在发送数据时正确解析您的集合,$.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,
                    }
                ]
            })
        });
    });
于 2013-01-29T20:21:36.190 回答