序列化形式为JSON的字段发送到ASP.NET控制器方法并且不绑定

时间:2014-07-08 19:20:38

标签: asp.net ajax asp.net-mvc asp.net-mvc-4

我有这样的ajax请求:

$.ajax({
     type: 'POST',
     url: 'XXXXX',
     data: {
         someField: $("#someField").val(),
         formSerialized: $("#form").serialize()
    },
})

我有控制器方法:

public ActionResult XXXXX(string someField, List<myModel> formSerialized)
{
    ......
}

所以这就是问题所在 - &#34; someField&#34;没有任何问题,但是&#34; formSerialized&#34;包含0项(我希望2)。

但是什么是interestring,如果我要创建这样的ajax请求:

$.ajax({
     type: 'POST',
     url: 'XXXXX',
     data: $("#form").serialize()
})

和控制器的方法:

public ActionResult XXXXX(List<myModel> formSerialized)
{
    ......
}

一切都很好(我在&#34中有2个项目; formSerialized&#34;)。如何在第一种情况下强制ASP.NET正确绑定数据?

2 个答案:

答案 0 :(得分:0)

我不是百分百确定,但serializeArray()应该修复

$.ajax({
     type: 'POST',
     url: 'XXXXX',
     data: {
         someField: $("#someField").val(),
         formSerialized: $("#form").serializeArray()
    },
})

答案 1 :(得分:0)

当您序列化表单时,它会根据表单输入创建一个URL编码的字符串。它使用name属性作为参数名称。

因此,当您对表单进行序列化时,您需要创建以下内容

someField=somestring&formSerialized=formdata&formSerialized=formdata2

哪个会绑定字符串和两个列表值。

这个问题......

$.ajax({
     type: 'POST',
     url: 'XXXXX',
     data: {
         someField: $("#someField").val(),
         formSerialized: $("#form").serialize()
    },
})

...您是否已将url编码参数绑定到参数,以便获得以下内容

someField=somestring&formSerialized=someField=somestring&formSerialized=formdata&formSerialized=formdata2

由于您在网址

中有formSerialized = someField = somestring,因此无效

这篇文章很好地解释了mvc模型绑定

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

希望这是有道理的。