1

我正在尝试序列化表单并将其作为模型传递给控制器​​。我在做什么我过去做过,但由于某种原因它不起作用,所以我怀疑我错过了一些愚蠢的东西。也许你能找到它。

在我的控制器中,我有一个方法:

    [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。有什么想法吗?谢谢。

编辑:这是请求标头。上一个是模型到方法的成功post,下一个是传入空模型的.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
4

1 回答 1

2

请求主体是一样的吗?不知何故,我很怀疑。

您的 ajax 请求正文将有

model=....

你的表单序列化在哪里....,哪个 url 对输入进行编码,然后序列化本身是 urlencoded。您使用 ajax 请求进行了两次 urlencoding。普通形式的帖子不会发生这种情况,并且 urlencoding 对于等号不是幂等的。

尝试

    data: $('#shippinginfoform').serialize(),

如果shippinginfoform表单与发布的表单相同,我认为应该发布相同的数据(嗯,通常:可能存在一些极端情况,其值与提交按钮等相关联。)。

我承认我有可能是错的,在这种情况下,我会立即删除这个答案。

于 2012-11-03T04:30:44.530 回答