如何在asp.net mvc中绑定数组json

时间:2014-10-21 19:52:48

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

我有一个学生信息表,应该以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数组对象但不在控制器中绑定,任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:0)

我认为你必须反序列化你动作中的对象

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

答案 1 :(得分:0)

你的开关好像坏了。您在第二个和第三个案例陈述中分配的属性名称是日期,但在第一个分配给类型的属性名称(根据您的模型看起来是正确的)。我不确定这是否会导致模型绑定器忽略您的对象并拒绝绑定,但这是一个很好的第一步。

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

答案 2 :(得分:0)

要使模型绑定器正确处理ajax请求,请求需要将内容类型指定为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
});

答案 3 :(得分:0)

我将我的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)
{
   ...
}

正确绑定