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を使用しています。何かアイデアはありますか? ありがとう。

編集:これがリクエストヘッダーです。上はメソッドへのモデルの投稿が成功したもので、下は 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
4

1 に答える 1

2

リクエストボディは同じですか?なんだか、疑問です。

あなたのajaxリクエストボディには

model=....

シリアル化されたフォームはどこに....あり、どの URL が入力をエンコードしてから、シリアル化自体が URL エンコードされますか。ajax リクエストで 2 回 URL コーディングしています。これは通常の形式の投稿では発生せず、urlencoding は等号に関して冪等ではありません。

試す

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

shippinginfoformフォームが投稿されたものと同じフォームである場合、同じデータを投稿する必要があると思います (まあ、一般的には、送信ボタンなどに関連付けられた値を持つまれなケースがあるかもしれません)。

私が間違っている可能性があることを認めます。その場合、この回答をすぐに削除します。

于 2012-11-03T04:30:44.530 に答える