如何在ASP.Net MVC4中将JSON数组提交到数据库表

时间:2013-10-03 13:42:39

标签: arrays json asp.net-mvc-4 multidimensional-array

这是将该数组发布到GetBulk方法的JSON代码:

$("#button").click(function () {
    var array = [
        {
            StudentRecordId: 1,
            Name: "Amit",
            Marks: 11,
            Grade: "A"
        },
        {
            StudentRecordId: 2,
            Name: "Abhishek",
            Marks: 12,
            Grade: "A"
        },
        {
            StudentRecordId: 3,
            Name: "Vipin",
            Marks: 13,
            Grade: "A"
        }
    ]

    $.ajax({
        type: "Post",
        url: "/Home/GetBulk",
        dataType: "json",
        traditional:true,
        data: JSON.stringify({ data: array }),
        traditional: true,//"feedGraphId=10696",
        success: function (result) {
            alert("j= " + result.studentRecord);                 
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("error" + errorThrown);
        }
    });
});                

这是我的控制器的方法:

//to recieve array from json and post values to student record table
public JsonResult GetBulk(List<StudentRecord> models)
{
    StudentRecord studentRecords = new StudentRecord();

    foreach(var item in models)
    {
        studentRecords.Name = item.Name;
        studentRecords.Marks = item.Marks;
        studentRecords.Grade = item.Grade;
        db.StudentRecords.Add(studentRecords);
        db.SaveChanges();
    }

    var c = db.StudentRecords.ToList();
    return Json(models, JsonRequestBehavior.AllowGet);
}

这是我的模特:

public class StudentRecord
{
    public long StudentRecordId { get; set; }
    public string Name { get; set; }
    public int Marks { get; set; }
    public string Grade { get; set; }
}

那么如何使用这个json数组将我的值提交给表?

1 个答案:

答案 0 :(得分:4)

您忘记设置AJAX请求的contentType并且还发送了错误的JSON有效内容(您的服务器需要一个数组,但您将其作为对象发送:{"data":[...]}):

$.ajax({
    type: 'POST',
    url: '/Home/GetBulk',
    contentType: 'application/json',
    data: JSON.stringify(array),
    success: function (result) {
        alert("j= " + result.studentRecord);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert("error" + errorThrown);
    }
});

我在代码中注意到的其他事项:

  • 摆脱了dataType: 'json' - &gt;如果服务器设置了正确的Content-Type响应头(如果你返回一个Json结果,它将会是这样),这是不必要的。在这种情况下,jQuery将使用此响应头来了解如何处理响应数据
  • 摆脱了traditional: true参数 - &gt;当你发送一个你在这里做的JSON请求时它没用了
  • JSON.stringify({ data: array })替换为JSON.stringify(array),因为第一个数据将像这样发送:{ "data": [...] }而您的服务器需要List<StudentRecord>,因此有效负载应如下所示: [...]