将JSON发布到控制器MVC5

将JSON发布到控制器MVC5,json,asp.net-mvc,Json,Asp.net Mvc,我将JSON发布到我的控制器,但问题是我在列表中获得了正确的计数。i、 e如果JSON有两个元素,则列表的计数为2,但数据为空。下面是我制作并发送JSON的代码。我已经使用TabletoJSON来制作JSON $('#productsObj').click(function () { var rawMaterials = $('#productsTable').tableToJSON( {

我将JSON发布到我的控制器,但问题是我在列表中获得了正确的计数。i、 e如果JSON有两个元素,则列表的计数为2,但数据为空。下面是我制作并发送JSON的代码。我已经使用TabletoJSON来制作JSON

        $('#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结构映射到控制器操作当前作为参数的字符串列表(
list
):

[{"Raw Material Name":"Asphalt","Short Code":"AS02","Price":"20"}]
public ActionResult insertRawMaterial(IList<MaterialViewModel> data)
{
    ...    
}
因此,您可以从定义将反映此结构的适当视图模型开始(或者几乎,请参见下面所需的按摩技术):

控制器操作将作为参数:

[{"Raw Material Name":"Asphalt","Short Code":"AS02","Price":"20"}]
public ActionResult insertRawMaterial(IList<MaterialViewModel> data)
{
    ...    
}
public ActionResult insertRawMaterial(IList数据)
{
...    
}
最后,在客户机上对数据进行按摩,以匹配正确的属性名称(当然是名称、快捷码和价格):

//我们需要对原始数据进行处理,因为这些数据与属性名毫无关系
//包含空间、星系和其他东西
var massagedRawMaterials=[];
对于(var i=0;i

这是说,如果你当前使用的客户端库产生了这样的不确定性属性名称,你可以考虑用更合适的东西来替换它。

请向我们展示你的开发工具的JSON有效载荷。看起来你在调用已经是JSON字符串的东西。我已经删除了JSON.strigify,现在从控制器中获得500。这里是JSON@Amy[{“原料名称”:“沥青”,“短代码”:“AS02”,“价格”:“20”}]@Amy这里是JSON[{“原料名称”:“沥青”,“短代码”:“AS02”,“价格”:“20”}工作得很有魅力。投票可能:)
// 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",
    ...