2017-07-03 157 views
0

我試圖JSON數據傳遞從視圖控制器,但控制器獲得空所有我在這裏嘗試每一件事情來解決這個問題,但沒有找到任何解決辦法的時候是我的控制器和JSON數據控制器沒有得到JSON數據

$("#ex_save").on("click",function() { 
     var array = @Html.Raw(Json.Encode(Model)); 
     var json = JSON.stringify(array); 
     $.ajax({ 
      type: "POST", 
      url: "/Equipment/BulkUpdate", 
      data: { jsonCollection : json }, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function() { 
       console.log("Saved"); 
      }, 
      error: function (e) { 
       console.log(e); 
      } 
     }); 
    }); 

這是我的ajax方法將數據傳遞給控制器​​。 這裏是我的控制器來獲得這些數據: -

[HttpPost] 
    public ActionResult BulkUpdate(string jsonCollection) 
    { 
     try 
     { 
      return View(); 
     } 
     catch 
     { 
      throw; 
     } 
    } 

這裏是我傳遞 enter image description here

這裏的JSON是錯誤: - enter image description here

+0

有你內JSON發送JSON,而不是僅僅使用標準ModelBinder的具體原因是什麼?看起來你只是增加了複雜性,除了給自己更多的工作之外沒有任何理由。 –

+0

@RoryMcCrossan我有我展示的視圖,以便用戶可以對其進行編輯,然後按提交保存編輯的表格,但我已經分頁所以只通過第一頁的數據採集控制器,所以我想這樣。 – Abhay

+0

你傳遞一個字符串,並期望得到一個字符串,但你的$就調用告訴它,它實際上是JSON(如果它不是,它是一個字符串)。將contentType更改爲字符串或將其刪除。 https://stackoverflow.com/a/18701357/2181514 –

回答

1

你需要做的這

$("#ex_save").on("click",function() { 
     var array = @Html.Raw(Json.Encode(Model)); 
     var jsonData = {jsonCollection : array}; 
     var postJson = JSON.stringify(jsonData); 
     $.ajax({ 
      type: "POST", 
      url: "/Equipment/BulkUpdate", 
      data: postJson, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function() { 
       console.log("Saved"); 
      }, 
      error: function (e) { 
       console.log(e); 
      } 
     }); 
    }); 

你在做什麼是你已經使用JSON.stringify()的JSON轉換成array變量,然後你到新的JSON對象{ jsonCollection : json }作爲POST請求主體分配這一點。因此,它是像 {'name':'test1', 'age':'12'} 一個有效的JSON對象,然後jQuery的可能不將其作爲JSON數據,而是它序列化到name=test1&age=12 從而得到錯誤 "Invalid JSON primitive: name"

而在你的情況,"Invalid JSON primitive: jsonCollection"。所以請嘗試使用上述代碼。和

+0

它幫助現在沒有得到錯誤,但仍然沒有獲得控制器的集合值。 – Abhay

+0

但我認爲這裏的問題是解決錯誤。現在,您需要檢查服務器中的響應數據或請求負載並進行調試。 –

+0

我也認爲它應該是綠色標記的答案解決了錯誤。 –

0
$("#ex_save").on("click",function() { 
    var array = @Html.Raw(Json.Encode(Model)); 
    var jsonData = {jsonCollection : array}; 
    var postJson = JSON.stringify(jsonData); 
    $.ajax({ 
     type: "POST", 
     url: "/Equipment/BulkUpdate", 
     data: postJson, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function() { 
      console.log("Saved"); 
     }, 
     error: function (e) { 
      console.log(e); 
     } 
    }); 
}); 

而不是在控制器嘗試獲取字符串獲取ICollection的

[HttpPost] 
public ActionResult BulkUpdate(ICollection<your_class_type> jsonCollection) 
{ 
    try 
    { 
     return View(); 
    } 
    catch 
    { 
     throw; 
    } 
}