2017-02-05 118 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

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