我正在寻找一种通过JSON将对象数组POSTing到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包含一项,这是理所应当的
该ItemList中的项未初始化。Str为空,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项目中替换它?
我已经提出的相关StackOverflow问题都无济于事:
Asp.net Mvc Ajax Json (post Array)使用MVC2和更老的基于表单的编码-这种方法对于包含对象数组的对象失败(JQuery无法对其进行正确编码)。
Post an array of complex objects with JSON, JQuery to ASP.NET MVC Controller使用了一种我想避免的方法,即控制器接收一个普通字符串,然后手动反序列化自己,而不是利用框架。
MVC3 RC2 JSON Post Binding not working correctly 没有设置他的内容类型-它是在我的代码中设置的。
这个可怜的家伙不得不写一个JsonFilter来解析一个数组。另一个我更希望避免的黑客攻击。
那么,我如何实现这一点呢?
https://stackoverflow.com/questions/4789481
复制相似问题