2012-11-03 39 views
1

我試圖序列化一個窗體並將其作爲模型傳遞給控制器​​。我在過去做過的事情,但由於某種原因,它不起作用,所以我懷疑我錯過了一些愚蠢的事情。也許你可以找到它。通過MVC 4控制器的模型爲空

在我的控制器我有一個方法:

[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 

回答

1

請求機構是一樣的嗎?不知何故,我很懷疑。

你的Ajax請求體將不得不

model=....

其中....是你的形式連載,其URL編碼的輸入,然後序列化本身url編碼。您正在使用您的ajax請求進行兩次urlencoding編碼。這在正常形式的帖子中不會發生,並且urlencoding在等號的情況下不是冪等的。

嘗試

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

如果shippinginfoform形式是公司發佈的形式相同,我相信應該張貼相同的數據(當然,一般爲:可能有一些角落情況下與提交按鈕相關的值等等)。

我承認有一些機會,我錯了,在這種情況下,我會及時刪除這個答案。

+0

是的,你說得對。接得好。甚至沒有考慮改變這一點。謝謝。 – Nozoku

相關問題