Chr*_*ini 65 arrays post json asp.net-mvc-3
我正在寻找通过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'
});
Run Code Online (Sandbox Code Playgroud)
ListViewModel.cs:
public class ListViewModel
{
public List<ItemViewModel> ItemList { get; set; }
public float X { get; set; }
public float Y { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ItemViewModel.cs:
public class ItemViewModel
{
public string Str; // originally posted with: { get; set; }
public bool Enabled; // originally posted with: { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ListController.cs:
public ActionResult Save(ListViewModel list)
{
// Do something
}
Run Code Online (Sandbox Code Playgroud)
这个POST的结果:
list被设置,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
Run Code Online (Sandbox Code Playgroud)
看来MVC3 JsonValueProvider不适用于复杂对象.我如何让它工作?我是否需要修改现有的MVC3 JsonValueProvider并修复它?如果是这样,我如何获得它并在MVC3项目中替换它?
我已经追求的相关StackOverflow问题无济于事:
Asp.net Mvc Ajax Json(post Array) 使用MVC2和旧的基于表单的编码 - 该方法失败,对象包含一个对象数组(JQuery无法正确编码).
使用JSON发布一个复杂对象数组,将JQuery发布到ASP.NET MVC控制器 使用一个hack我想避免控制器接收一个普通字符串,然后手动反序列化自己,而不是利用框架.
MVC3 RC2 JSON Post绑定无法正常工作 没有他的内容类型集 - 它是在我的代码中设置的.
如何使用JSON,jQuery向ASP.NET MVC Controller发布复杂对象数组? 这个可怜的家伙不得不写一个JsonFilter来解析一个数组.另一个我宁愿避免的黑客行为.
那么,我该如何实现呢?
sta*_*247 43
除此之外{ get; set; },这些是JSON绑定支持的一些条件:
{ get; set; }方法.更多在我的岗位.
希望有所帮助!
Chr*_*ini 30
问题是列表中的模型中的属性没有在其公共属性上获取/设置.换句话说,MVC3的自动JSON绑定仅适用于具有get和set的对象属性.
这不会绑定:
public string Str;
Run Code Online (Sandbox Code Playgroud)
这将绑定:
public string Str { get; set; }
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 29
真奇怪.我无法重现您的行为.这是我的设置(ASP.NET MVC 3 RTM):
模型:
public class ItemViewModel
{
public string Str { get; set; }
public bool Enabled { get; set; }
}
public class ListViewModel
{
public List<ItemViewModel> ItemList { get; set; }
public float X { get; set; }
public float Y { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Save(ListViewModel list)
{
return Json(list);
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
@{
ViewBag.Title = "Home Page";
}
<script type="text/javascript">
$(function () {
var data = { ItemList: [{ Str: 'hi', Enabled: true}], X: 1, Y: 2 };
$.ajax({
url: '@Url.Action("save", "home")',
data: JSON.stringify(data),
type: 'POST',
contentType: 'application/json',
dataType: 'json',
success: function (result) {
alert(result.ItemList[0].Str);
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
运行此警报"hi"并在Save操作内部正确初始化所有内容.
只是为了记录不起作用的是字典.我已经开了一张关于这个问题的票.
| 归档时间: |
|
| 查看次数: |
71149 次 |
| 最近记录: |