Отправка нулевого значения в действие MVC с помощью jQuery - PullRequest
2 голосов
/ 20 марта 2012

MVC 2

Я пытаюсь опубликовать действие MVC с помощью jQuery, но получаю исключение, сообщающее, что id равно нулю.Нужен ли какой-то атрибут в действии контроллера для принятия таких пакетов json?Что-то еще мне не хватает?

[HttpPost]
public ActionResult SearchCategory(int id, string SearchTerm, int PageNumber, int SiteIdFilter)
{
    return Json(AssociationsDao.SearchCategory(id, SearchTerm, PageNumber, SiteIdFilter));
}

post('<%= Url.Action("SearchCategory") %>', 
    JSON.stringify({id: 12, SearchTerm: '', PageNumber: 1, SiteIdFilter: 1}), 
    function(d) { alert(d); });

function post(targetURL, dataInput, success) {
    $.ajax({
        url: targetURL,
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: dataInput,
        dataType: "json",
        success: success,
        async: true
    });
}

Из инструментов разработчика Chrome это исключение:

Словарь параметров содержитпустая запись для параметра 'id' ненулевого типа 'System.Int32' для метода 'System.Web.Mvc.ActionResult SearchCategory (Int32, System.String, Int32, Int32)' в 'Current.Web.BackOffice.WebUI.Controllers.SiteProductAssociationsController.Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр.Имя параметра: параметры


РЕДАКТИРОВАТЬ

Вот скриншот данных поста из chrome;Я не вижу в этом ничего плохого:

enter image description here

1 Ответ

6 голосов
/ 20 марта 2012

Измените функцию post на это:

function post(targetURL, dataInput, success) {
    $.ajax({
        url: targetURL,
        type: "POST",
        data: dataInput,
        success: success,
        async: true        
    });
}

MVC умнее, чем веб-сервисы asmx. Вместо того, чтобы настаивать на строке json, на самом деле вам нужно просто передать простой объект JavaScript. См. этот ответ для получения дополнительной информации.

Когда вы даете функции $ .ajax () jQuery переменную данных в виде объекта JavaScript, он фактически переводит его в серию пары ключ / значение и таким образом отправляет его на сервер. Когда ты отправить строковый объект JSON, это не в той форме, а стандартная модель переплета в MVC / MVC2 не будет сокращать его.


Также обратите внимание, что параметр async является излишним, поскольку true является значением по умолчанию, но это не повредит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...