Как читать данные jquery.ajax () в контроллере MVC 2 - PullRequest
0 голосов
/ 13 июля 2011

Я использую 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");
    }

Здесь я не получаю данные в контроллер.Но когда я использую data: JSON.stringify (recordsToSave), я могу видеть данные в firebug.

enter image description here

Как читать данные в контроллере.Пожалуйста, помогите.

1 Ответ

1 голос
/ 13 июля 2011

JSON.stringify преобразует объект javascript в строку JSON. Если вы хотите отправлять запросы JSON в ASP.NET MVC 2, вам нужен поставщик значений JSON, поскольку он не является встроенным. См. этот блог для более подробной информации. В 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);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...