2017-02-05 158 views
0

我張貼JSON到我的控制器,但問題是我正在清單中得到正確的計數。即如果JSON有兩個元素,則列表中有兩個計數但爲空數據。以下是我正在製作和發送JSON的代碼。我已經使用TabletoJSON來製作JSON。發佈JSON到控制器MVC 5

 $('#productsObj').click(function() { 
      var rawMaterials = $('#productsTable').tableToJSON(
         { 
          ignoreColumns: [3] 
         }); 

      alert(JSON.stringify(rawMaterials)); 
      console.log(rawMaterials); 

       $.ajax({ 
        url: "/Supplies/insertRawMaterial", 
        type: "POST", 
        data: JSON.stringify(rawMaterials), 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        traditional: true, 
        error: function (response) { 
         alert(response.responseText); 
        }, 
        success: function (response) { 
         alert(data); 
         alert(response); 
        } 
       }); 

     }); 

以下是正在接收數據的控制器動作方法。

public ActionResult insertRawMaterial(List<String> data) 
    { 

     if (data != null) 
     { 
      return Json("Success"); 
     } 
     else 
     { 
      return Json("An Error Has occoured"); 
     } 

    } 

我不知道我在哪裏做錯了。以下是警報中的JSON。

[{"Raw Material Name":"Asphalt","Short Code":"AS02","Price":"20"}] 
+1

請向我們展示開發人員工具中的JSON有效內容。 – Amy

+1

好像你在已經是JSON字符串的東西上調用'JSON.stringify'。 – haim770

+0

@ haim770我已經從控制器中刪除了JSON.strigify。 –

回答

1

你不可能指望這個複雜的JSON結構映射到(List<String>)字符串列表,你的控制器操作目前需要的參數:

[{"Raw Material Name":"Asphalt","Short Code":"AS02","Price":"20"}] 

所以,你可以通過定義相應的視圖啓動將反映這種結構的模型(或幾乎見下面所要求的按摩技術):

public class MaterialViewModel 
{ 
    public string Name { get; set; } 

    public string ShortCode { get; set; } 

    public decimal Price { get; set; } 
} 

你的控制器動作將採取的參數:

public ActionResult insertRawMaterial(IList<MaterialViewModel> data) 
{ 
    ...  
} 

,最後按摩客戶端上的數據來匹配正確的屬性名稱(姓名,簡碼,當然價格):

// we need to massage the raw data as it is crap with property names 
// containing spaces and galaxies and stuff 
var massagedRawMaterials = []; 

for (var i = 0; i < rawMaterials.length; i++) { 
    var material = rawMaterials[i]; 
    massagedRawMaterials.push({ 
     name: material['Raw Material Name'], 
     shortCode: material['Short Code'], 
     price: material['Price'] 
    }); 
} 

$.ajax({ 
    url: "/Supplies/insertRawMaterial", 
    type: "POST", 
    data: JSON.stringify(massagedRawMaterials), 
    contentType: "application/json; charset=utf-8", 
    ... 

這就是說,如果客戶端你正在使用的庫會產生這種不確定的屬性名稱,你可能會考慮用更合適的東西替換它。

+0

工作就像一個魅力。投票可能:) –