如何过JSON将一个对象数组发布到ASP.NETMVC 3?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (59)

我正在寻找一种解决方案,通过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
}

这篇文章的结果:

列表设置为ListViewModel设置 其X和Y属性设置 基础ItemList属性 ItemList包含一个项目,因为它应该 该项目列表中的项目未初始化。Str为空并且Enabled为假。

换句话说,这就是我从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的自动JSON绑定仅适用于已获取和设置的对象属性。

这不会绑定:

public string Str;

这将约束:

public string Str { get; set; }
用户回答回答于

除此之外{ get; set; },这些是JSON绑定支持的一些条件:

  1. 这是ASP.NET MVC 3中的新功能(请参阅“ JavaScript和AJAX改进 ”)。
  2. JSON对象的字符串('X','Y','Str'和'Enabled')必须与ViewModel对象的属性匹配。
  3. ViewModel对象的属性必须有{ get; set; }方法。
  4. 必须在请求中指定内容类型为“application / json”。
  5. 如果它仍然不起作用,请检查JSON字符串以确保它是有效的。

我的文章阅读更多。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励