如何在mvc 2控制器中读取jquery.ajax()数据

时间:2011-07-13 07:01:09

标签: asp.net-mvc-2

我正在使用mvc2和jqueries将数据从视图发布到控制器。

这是我的观点

        $('#btnSaveAcademicInfo').click(function() {
        var recordsToSave = [];
        var curRecord = null;
        $.each($("#academics tr"), function(i, v) {
            curRecord = {};
            curRecord.Institution = $(this).find('.tdName').text();
            curRecord.PassoutYear = $(this).find('.tdPassOutYear').text();
            curRecord.Percentage = $(this).find('.tdPercentage').text();
            curRecord.Specialization = $(this).find('.tdspecialization').text();
            recordsToSave.push(curRecord);
        });

        $.ajax({
            type: 'POST',
            url: '/EmployeeMaster/SaveAcademicInfo',
            data: recordsToSave,
            success: function(result) { success(result); },
            datatype: "json"
        });
    });

我的控制器是

    [HttpPost]
    public ActionResult SaveAcademicInfo(List<AcademicModel> data)
    {
        //Here data is always null
        return View("GetPersonalDataById");
    }

这里我没有得到控制器的数据。但是当我使用数据:JSON.stringify(recordsToSave)时,我能够在firebug中看到数据。

enter image description here

如何读取控制器中的数据。 请帮忙。

1 个答案:

答案 0 :(得分:1)

JSON.stringify将javascript对象转换为JSON字符串。如果要在ASP.NET MVC 2中发送JSON请求,则需要JSON值提供程序,因为它不是内置的。有关详细信息,请参阅this blog post。在ASP.NET MVC 3中,由于内置JsonValueProviderFactory

,因此开箱即用

此外,如果您要发送JSON请求,还需要指定内容类型:

$.ajax({
    type: 'POST',
    url: '/EmployeeMaster/SaveAcademicInfo',
    data: JSON.stringify(recordsToSave),
    contentType: 'application/json',
    dataType: 'json', // <!-- notice the capital T
    success: function(result) { 
        success(result); 
    },
});

如果您不想使用JSON,则需要以默认模型绑定器可以理解的方式格式化请求。试试这样:

var recordsToSave = [];

$.each($('#academics tr'), function (index, value) {
    recordsToSave.push({
        'name': '[' + index + '].Institution',
        'value': $(this).find('.tdName').text()
    });
    recordsToSave.push({
        'name': '[' + index + '].PassoutYear',
        'value': $(this).find('.tdPassOutYear').text()
    });
    recordsToSave.push({
        'name': '[' + index + '].Percentage',
        'value': $(this).find('.tdPercentage').text()
    });
    recordsToSave.push({
        'name': '[' + index + '].Specialization',
        'value': $(this).find('.tdspecialization').text()
    });
});

$.ajax({
    type: 'POST',
    url: '/EmployeeMaster/SaveAcademicInfo',
    data: recordsToSave,
    success: function (result) {
        success(result);
    }
});