在一个MVC控制器的POST中,我使用JQuery发送一个具有两个属性的JSON对象:Id和Foos。出于某种原因,每个FooModel实例的所有属性都是空/空的。asp.net mvc json解串器不工作
这里的方法:
[HttpPost]
public ActionResult EditFoo(int Id, FooModel[] foos)
这是我的小提琴手,获取表单参数(我可以证实,该数据被传递到服务器)。我还用两个调试器验证了JSON对象包含所有正确的值。
Id 17934
Foos[0][Label] My Foo
Foos[0][Bars][0][Label] First Bar
Foos[0][Bars][0][Id] 1
Foos[0][Bars][1][Label] Second Bar
Foos[0][Bars][1][Id] 2
FooModel看起来像这样:
public class FooModel
{
public string Label { get; set; }
public IList<Bar> Bars { get; set; }
}
在EditFoo方法,我可以看到的富项目的权限编号的数组(在该例子中,1)。但是,每个FooModel实例中的所有属性都是空/空的。
编辑1:
为了澄清:我不是手工创建表单参数。我通过ajaxArgs.data传递一个真正的JSON对象回到$ .ajax()。
表单数据本身看起来像这样:
Id=17934&Foos%5B0%5D%5BId%5D=1&&Foos%5B0%5D%5BLabel%5D=My+Foo...
我不能找到一个快速的方式来获得JSON本身作为一个字符串,但是这是分配给ajaxArgs.data(该FOOS变量其所有属性):
var data = { Id: Model.Id, Foos: Model.Foos };
编辑2:
我使用JavaScriptSerializer创建低于喜欢的字符串:
public static string ToJson(this object obj)
{
var serializer = new JavaScriptSerializer();
var foo = serializer.Serialize(obj);
return foo;
}
,然后让模型在这样的视图可用于JavaScript:
<script type="text/javascript">
var Model = <%= Model.ToJson() %>;
</script>
这就是Fiddler如何表示参数。我会得到一个JSON示例 – 2011-02-10 21:50:14
@c_bit,是的,我确信这就是Fiddler代表他们的方式,但也是因为这是他们被传送过来的方式。 jQuery允许您使用各种机制通过AJAX发送数据,包括POST *和* JSON两种形式。您明确使用表单POST变体,并且对于ASP.NET MVC模型联编程序,名称/值对的**名称**部分格式不正确。 – 2011-02-10 21:52:08