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

时间:2013-10-14 15:05:34

标签: c# javascript ajax asp.net-mvc post

我有以下工作代码:

类(声明的对象)

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 Call

 $.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,varible输入始终为null。

但每次我通过控制器参数发送此列表时,“input”始终为null。

为什么会这样?

解决 -

public virtual JsonResult SaveRow(saveRow[] input)

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

1 个答案:

答案 0 :(得分: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");
       }
   });