2017-03-17 71 views
0

我從JQuery發送Json到一個Action Controller,但由於某種原因,Json字符串中的第一個和最後一個元素在我的操作控制器中沒有正確接收,看起來好像一個大括號被添加作爲值的最後一個元素,並且當是一個可爲空場的第一個元素總是空,或者如果它是一個int其值爲0 這是我的JQuery代碼:從JQuery發送JSON到MVC控制器的問題

$(function() { 
     $("#myButton").click(function() { 
      var student= JSON.stringify($("#myForm").serialize()); 
alert(student); 
$.ajax({ 
       type: 'post', 
       url: $("#myForm").data("url"), 
       data: JSON.stringify({ 'policy': student}), 
       success: //more code.. 
}) 

我正在使用警報顯示$("#myForm").serialize()的值,並且在警報執行時正在正確設置值。問題正在向動作控制器的方向發展。這是警告消息顯示:

"first_field=7.5&aut_id=3456690&..........more info in here no 
problem..........&birthday=&last_field=" 

對於json string由動作控制器接收時,這是它獲得:first_field= null(is a nullable field in my Model)last_field = "\\\"\"}"。它包含3個轉義字符,所以我想,該值是接收= \""}

應該發生什麼?被正確接收所有在中間的其他價值,這只是他的人在邊緣

這是我的動作控制器:

 [HTTPPost] 
    public ActionResult EditStudent(Student student) 
    { 
    //some code... 
    } 
+1

你不需要任何字符串化,肯定不是兩次。只需使用'data:$(「#myForm」)。serialize())' –

+0

@StephenMuecke它現在可以工作,謝謝。如果你想發佈它作爲答案,你可以做到這一點,我會選擇它作爲答案:) – AlexGH

回答

1

可以使用序列化的數據只發送數據

$.ajax({ 
    .... 
    data: $("#myForm").serialize(), 

如果字符串化的數據,將使用默認'application/x-www-form-urlencoded; charset=UTF-8'contentType

,那麼你需要可以爲S等的contentType'application/json',使得DefaultModelBinder使用JsonValueProvider到您的數據轉換,而在這種情況下,格式必須

$.ajax({ 
    .... 
    data: JSON.stringify($("#myForm").serialize()), 
    contentType: 'application/json; charset=UTF-8', 
相關問題