2015-05-07 130 views
0

我使用serializeJSON.stringify方法來對我的ASP.NET MVC應用程序進行Ajax調用。 MVC無法綁定模型。ASP.NET MVC模型與序列化綁定

這是我的JS代碼和強類型的視圖:

<script> 
    function saveDetails() { 
     jsonObj = $('#rdform').serialize(); 
     $.ajax({ 
      method: "POST", 
      url: "R/SaveDetail", 
      contentType: 'application/json; charset=utf-8', 
      dataType: "json", 
      data: JSON.stringify(jsonObj) 
     }); 
    } 
</script> 

<form id="rdform"> 
    <div> 
     <div> 
      @Html.LabelFor(m => m.LiIdH) 
      @Html.TextBoxFor(m => m.LiIdH) 
     </div> 
     <div> 
      @Html.LabelFor(m => m.LiIdR) 
      @Html.TextBoxFor(m => m.LiIdR) 
     </div> 
    </div> 
    <input type="button" onclick="saveDetails()" /> 
</form> 

請求的有效載荷是這樣的:

"LiIdH=1&LiIdD=&LiIdR=2" 

這是我的操作方法:

public bool SaveDetail(Detail detail) 

我錯過了什麼嗎?

+1

你不需要'串化'它 - 只需使用'data:jsonObj,' –

+0

在這種情況下,我會得到'無效的JSON基元'錯誤。 – Akbari

+0

然後還有一些其他問題。你確定你已經顯示了'

'標籤之間的所有html。表單數據包含'LiIdD ='的事實表明你沒有(沒有用'name =「LiIdD」''屬性來控制) –

回答

3

您遇到麻煩的原因是因爲您使用了serialize和JSON.stringify。 form.serialize返回一個字符串值,該值在傳遞給JSON.serialize時會用一對額外的引號包裝。爲你調用你的操作方法,最簡單的方法是刪除您的來電JSON.stringify也去掉Ajax調用的的contentType選項,並用默認的走了,如下圖所示:

<script> 
    function saveDetails() { 
     $.ajax({ 
      method: "POST", 
      url: "R/SaveDetail", 
      dataType: "json", 
      data: $('#rdform').serialize() 
     }); 
    } 
</script> 
+2

或者只是省略'contentType:'因爲默認是''application /的X WWW窗體-urlencoded; charset = UTF-8'' –

+0

謝謝Sean,但我應該刪除'contentType'完全。我不知道爲什麼,但你的'contentType'回答也會導致問題。但如果我刪除它,一切正常。 – Akbari

+1

我相信這是'charset ....'造成的麻煩,但是您正確地認爲刪除它並且僅僅使用默認設置可能是更好的選擇。 –