2

我有以下工作代码:

类(声明的对象)

public class saveRow
{
    public int proId { get; set; }
    public string proName{get;set;}
}

控制器:

[HttpPost]
public virtual JsonResult SaveRow(saveRow input)
{ /* CODE HERE */}

JavaScript 对象(已发送)

var test = {"proId" : 1, "proName" : "Test"}

JavaScript Ajax 调用

 $.ajax({
       type: "POST",
       url: "URL",
       dataType: "json",
       data: test,
       traditional: true,
       success: function (data, status, request) {
           if (data.Error != undefined) {
               alert("System Error: " + data.Error);
               $(row).find('*').attr('disabled', false);
               return;
           }

       },
       error: function (request, status, error) {
           console.log("ERROR");
       }
   });

现在,当我想发送我的行列表而不是一次发送一个时,就会出现问题,所以我做了以下操作:

为了测试我拿了同一个物体并完成了

var test2 = []; test2.push(test); test2.push(test);

对象现在看起来像:

[{"proId" : 1, "proName" : "Test"},{"proId" : 1, "proName" : "Test"}]

我的控制器现在看起来像:

  [HttpPost]
    public virtual JsonResult SaveRow(List<saveRow> input)
    { /* CODE HERE */}

在将对象列表作为 JSON 发送时也尝试IEnumberable过,可变输入始终为空。

但是每次我通过控制器参数“input”发送这个列表时总是为空。

为什么是这样?

解决了-

public virtual JsonResult SaveRow(saveRow[] input)

并添加了内容类型!使用 JSON.stringify!

4

1 回答 1

1

试试这个方法:

  • 为您的列表设置一个与参数名称“input”相同的包装器名称
  • 设置内容类型
  • 删除传统并使用 JSON.stringify 对您的数据进行字符串化。

JS:

var data = { "input": test2 };

$.ajax({
       type: "POST",
       url: "URL",
       dataType: "json",
       contentType:"application/json; charset=utf-8", //<--Set content Type
       data: JSON.stringify(data), //Set data
       success: function (data, status, request) {
           if (data.Error != undefined) {
               alert("System Error: " + data.Error);
               $(row).find('*').attr('disabled', false);
               return;
           }

       },
       error: function (request, status, error) {
           console.log("ERROR");
       }
   });
于 2013-10-14T15:09:23.660 回答