【问题标题】:how to bind array json in asp.net mvc如何在asp.net mvc中绑定数组json
【发布时间】:2014-10-21 19:52:47
【问题描述】:

我有一张包含学生信息的表格,应该以 json 格式的数组发布到服务器 这是

<table id="temlTbl">
  <tr>
     <th>ID</th>
     <th>Name</th>
     <th>Family</th>
     <th>Type</th>
  </tr>
   <tr>
     <td>1</td>
     <td>ali</td>
     <td>alavi</td>
     <td>one</td>
  </tr>
  <tr>
   <td>1</td>
   <td>reza</td>
   <td>rezaiee</td>
   <td>two</td>
  </tr>
</table>

这是序列化数据和发布ajax方法的jquery代码:

$(SaveTeacherBook).click(function () {  
        var students;
        var jsonobj = [];
        var item = {};
        var Type;
        for (var i = 1 ; i < temp.rows.length; i++) {
            item["ID"] = temp.rows[i].cells[0].innerHTML;
            item["Name"] = temp.rows[i].cells[1].innerHTML;
            item["Family"] = temp.rows[i].cells[2].innerHTML;
            switch (temp.rows[i].cells[3].innerHTML) {
                case "One":
                    Type= "1";
                    break;
                case "Two":
                    Type= "2";
                    break;
                case "Three":
                    Type= "3";
                    break;
            }
            item["Type"] = Type;
            jsonobj.push(item);
        }
        students= JSON.stringify(jsonobj);

        $.post('@Url.Action("Student", "Home")', students);
    });

这是我的行动方法:

[HttpPost]
public ActionResult NewTeacherBook( IList<ViewModel.StudentViewModel> students)
{
    ...
}

和型号:

class StudentViewModel
{
    public string ID {get; set;}
    public  string Name {get; set;}
    public string Family {get; set;}
    public string Type {get; set;}
}

这是 json 格式的数据:

"[{"ID":"1","Name":"ali","Family":"alavi","Type":"1"},{"ID":"2","Name":"reza","Family":"rezaiee","Type":"2"}]"

我尝试发布 json 数组对象但不在控制器中绑定,谁能帮帮我吗?

【问题讨论】:

  • 尝试为您的 ajax 请求设置 contentTypeapplication/json

标签: c# jquery asp.net-mvc json


【解决方案1】:

我认为你必须在你的操作中反序列化到对象

[HttpPost]
public ActionResult NewTeacherBook( string students)
{
    IList<ViewModel.StudentViewModel> = new JavaScriptSerializer().Deserialize<IList<ViewModel.StudentViewModel>>(students);
}

【讨论】:

  • 您可以,但您当然不必这样做。这就是模型绑定器的用途。
  • 不确定它是否像他试图实现的那样工作
  • 你的学生字符串里有没有json
【解决方案2】:

您的开关似乎坏了。您在第二个和第三个 case 语句中分配的属性名称是 day,但在第一个中您分配给 Type(根据您的模型看起来正确)。我不确定这是否会导致模型绑定器忽略您的对象并拒绝绑定,但这是一个很好的第一步。

switch (temp.rows[i].cells[3].innerHTML) {
  case "One":
      Type= "1";
      break;
  case "Two":
      day = "2";
      break;
  case "Three":
      day = "3";
      break;
}

【讨论】:

  • 这是有问题的输入错误!
  • 啊,明白了。您不是将代码直接复制到问题中吗?如果没有,您可能会错过导致问题的原因。您是否尝试过更改您的 $.post 以包含 JasonP 上面建议的内容类型?
【解决方案3】:

要让模型绑定器正确处理 ajax 请求,请求的 content-type 需要指定为application/json; charset=utf-8

尝试将$.post... 行更改为以下内容:

$.ajax({
    url: '@Url.Action("Student", "Home")',
    data: students,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    type: 'post',
    success: onSaved,
    error: onError
});

【讨论】:

    【解决方案4】:

    我将我的 jquery 代码更改为:

    $(SaveTeacherBook).click(function () {
    ...
     students= JSON.stringify({"students":jsonobj});
            $.ajax({
                url: '@Url.Action("Student", "Home")',
                type: "POST",
                data: students,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                }
            });
    

    和动作方法:

    [HttpPost]
    public ActionResult NewTeacherBook( IList<ViewModel.StudentViewModel> students)
    {
       ...
    }
    

    通过此更改正确绑定

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多