C# 保存对象列表与保存对象(来自 JSON)

问题描述 投票:0回答:1

我有以下工作代码:

类(声明的对象)

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 */}

还尝试过

IEnumerable
以 JSON 形式发送对象列表时,变量输入始终为 null。

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

这是为什么?

已解决:

public virtual JsonResult SaveRow(saveRow[] input)

并添加了内容类型!与

JSON.stringify

c# javascript ajax asp.net-mvc post
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");
       }
   });
© www.soinside.com 2019 - 2024. All rights reserved.