一尘不染

通过JSON将对象数组发布到ASP.Net MVC3

json

我正在寻找一种通过JSON将对象数组发布到MVC3的解决方案。

我正在处理的示例代码:http :
//weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-
mvc-3-preview-1.aspx

JS:

var data = { ItemList: [ {Str: 'hi', Enabled: true} ], X: 1, Y: 2 };

$.ajax({
    url: '/list/save',
    data: JSON.stringify(data),
    success: success,
    error: error,
    type: 'POST',
    contentType: 'application/json, charset=utf-8',
    dataType: 'json'
});

ListViewModel.cs:

public class ListViewModel
{
    public List<ItemViewModel> ItemList { get; set; }
    public float X { get; set; }
    public float Y { get; set; }
}

ItemViewModel.cs:

public class ItemViewModel
{
    public string Str;   // originally posted with: { get; set; }
    public bool Enabled; // originally posted with: { get; set; }
}

ListController.cs:

public ActionResult Save(ListViewModel list)
{
    // Do something
}

POST的结果:

将list设置为ListViewModel。设置
其X和Y属性。设置
基础的ItemList属性
。ItemList包含一个项目,
该项目应为未初始化。Str为null,Enabled为false。

换句话说,这就是我从MVC3的模型绑定中得到的结果:

list.X == 1
list.Y == 2
list.ItemList != null
list.ItemList.Count == 1
list.ItemList[0] != null
list.ItemList[0].Str == null

MVC3 JsonValueProvider似乎不适用于复杂对象。我该如何工作?我是否需要修改现有的MVC3
JsonValueProvider并对其进行修复?如果是这样,我如何获得它并在MVC3项目中替换它?

MVC3 RC2JSON发布绑定未正常工作 未设置他的内容类型-它在我的代码中设置。

如何使用JSON,jQuery将复杂对象数组发布到ASP.NET MVCController?
这个可怜的家伙不得不写一个JsonFilter只是为了解析一个数组。我宁愿避免的另一种攻击。

那么,我该如何实现呢?


阅读 256

收藏
2020-07-27

共1个答案

一尘不染

问题在于,列表中的模型中的属性没有在其公共属性上获得/设置。换句话说,MVC3的自动JSON绑定仅适用于具有get和set属性的对象属性。

这不会绑定:

public string Str;

这将绑定:

public string Str { get; set; }
2020-07-27