我正在尝试序列化表单并将其作为模型传递给控制器。我在做什么我过去做过,但由于某些原因它不起作用,所以我怀疑我错过了一些愚蠢的东西。也许你可以找到它。
在我的控制器中,我有一个方法:
[HttpPost]
public ActionResult AddShippingLocation(PricingRequestModel model)
{
model.ShippingLocationsModel.Add(new ShippingLocationsModel());
return PartialView("shiplocationPartial", model);
}
在我看来,我有一个看起来像这样的脚本:
function AddShippingLocation() {
$.ajax({
data: { model: $('#shippinginfoform').serialize() },
type: "POST",
url: "/PricingRequest/AddShippingLocation",
success: function (response) {
$('#shiplocation-wrapper').html(response);
}
})
}
从被点击的链接调用此方法。另外在视图中我有一个使用它的表单:
@using (Html.BeginForm("AddShippingLocation", "PricingRequest", FormMethod.Post, new { id = "shippinginfoform" }))
{
我将Addshippinglocation作为方法,因为我想测试是否使用内置帮助程序序列化模型。使用Html.BeginForm正确传递模型,使用Ajax.BeginForm时它也会正确传递。但是,在使用jquery.serialize时,它无法正确传递。另外,我正在使用MVC 4.任何想法?感谢。
编辑:这是请求标头。最上面的一个是模型到方法的成功帖子,底部是在null模型中传递的.serialize()。我检查了帖子字符串,并且完全相同。
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection keep-alive
Cookie .ASPXAUTH=9F06BF2A7D03211E0D2ACEC26D7A568754C89F8A265EE61D9F8010BB8DF1D97670212F1E853FDE960E87AAC5DC7D364A251F670560448482517DA7C072864F62AC0C5C3E1EE8D375ACC1EA8F4D63CFC3C1DD28BBDCAC945155D15289DCDDA3B540756C0609611C13A438B5FF4CA747219290AFB51F58B8AD35AE40C01D3AFAF8B32ADD7E200148B1E1646400CAC0F116; ASP.NET_SessionId=v3qwt02dn1pd13posl5zzk3n
Host localhost:2652
Referer http://localhost:2652/PricingRequest/custinfo
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0
Request Headers From Upload Stream
Content-Length 471
Content-Type application/x-www-form-urlencoded
Accept */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Cache-Control no-cache
Connection keep-alive
Content-Length 555
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Cookie .ASPXAUTH=9F06BF2A7D03211E0D2ACEC26D7A568754C89F8A265EE61D9F8010BB8DF1D97670212F1E853FDE960E87AAC5DC7D364A251F670560448482517DA7C072864F62AC0C5C3E1EE8D375ACC1EA8F4D63CFC3C1DD28BBDCAC945155D15289DCDDA3B540756C0609611C13A438B5FF4CA747219290AFB51F58B8AD35AE40C01D3AFAF8B32ADD7E200148B1E1646400CAC0F116; ASP.NET_SessionId=v3qwt02dn1pd13posl5zzk3n
Host localhost:2652
Pragma no-cache
Referer http://localhost:2652/PricingRequest/custinfo
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0
X-Requested-With XMLHttpRequest
答案 0 :(得分:2)
请求主体是一样的吗?不知何故,我很怀疑。
你的ajax请求正文
model=....
其中....
是您的表格序列化,其中url对输入进行编码,然后序列化本身是urlencoded。您使用ajax请求进行了两次urlencoding。普通表格帖子不会发生这种情况,并且对于等号,urlencoding不是幂等的。
尝试
data: $('#shippinginfoform').serialize(),
如果shippinginfoform
表单与发布的表单相同,我相信应发布相同的数据(一般情况下:可能会出现一些与提交按钮关联的值的极端情况等等。)。
我会承认我错了,在这种情况下我会立即删除这个答案。