【发布时间】:2011-06-14 22:32:41
【问题描述】:
我正在寻找一种通过 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 的结果:
列表设置为 ListViewModel
它的 X 和 Y 属性已设置
基础 ItemList 属性已设置
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 项目中替换它?
相关 StackOverflow 问题我已经追问无济于事:
Asp.net Mvc Ajax Json (post Array) 使用 MVC2 和较旧的基于表单的编码 - 该方法因包含对象数组的对象而失败(JQuery 无法正确编码)。
Post an array of complex objects with JSON, JQuery to ASP.NET MVC Controller 使用我想避免的 hack,控制器改为接收纯字符串,然后手动反序列化自身,而不是利用框架。
MVC3 RC2 JSON Post Binding not working correctly 没有设置他的内容类型 - 它在我的代码中设置。
How to post an array of complex objects with JSON, jQuery to ASP.NET MVC Controller? 这个可怜的家伙不得不写一个 JsonFilter 来解析一个数组。另一个我希望避免的黑客攻击。
那么,我该如何实现呢?
【问题讨论】:
-
更新:我已经深入研究了 JsonValueProviderFactory。它正确地使用“str”属性并将其作为 Key="ItemList[0].Str", Value="hi" 添加到支持字典中,这看起来是正确的。模型绑定器?
-
您先生,刚刚收到了一个赞成票和一颗星,因为您出色地执行了堆栈溢出问题! :)
-
这里也一样,这是最后让它为我工作的那个。谢谢!
标签: arrays json post asp.net-mvc-3