【问题标题】:C# Saving Object List Vs Saving Object (From JSON)C# 保存对象列表与保存对象(来自 JSON)
【发布时间】:2013-10-22 04:46:47
【问题描述】:

我有以下工作代码:

类(声明的对象)

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

还尝试IEnumberable 将对象列表作为 JSON 发送时,变量输入始终为空。

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

这是为什么?

已解决-

public virtual JsonResult SaveRow(saveRow[] input)

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

【问题讨论】:

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


    【解决方案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");
           }
       });
    

    【讨论】:

    • 啊,我看到你在这里得到的东西,目前添加了它,项目是builidng将更新结果。 span>
    • @LmC 是的,让我知道它是怎么回事。如果它不起作用,只需将您在网络控制台中看到的内容粘贴到请求部分。
    • 您好,同样的问题我的对象看起来像 {"input" :[ {},{}]} 请注意 {} 只是上面显示的结构的缩写,以保持评论整洁
    • 缓存被禁用(使用 chorme 开发工具)
    • 我很想知道为什么,这是个谜!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2016-08-15
    • 2013-04-10
    • 2017-12-09
    相关资源
    最近更新 更多