Параметр контроллера NULL при использовании jQuery POST и ASP.NET MVC - PullRequest
3 голосов
/ 11 мая 2009

У меня нет проблем с обработкой запросов jQuery GET в контроллере, однако я не могу получить данные формы в POST. Фрагмент клиента

$.post(url,{name:"John"},function(result){ 
    //process result
});

в сочетании с контроллером,

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(string name)
{
    return Json("Success!");
}

приведет к значению NULL для параметра имени при проверке внутри метода действия, тогда как я ожидал, что имя будет сопоставлено с параметром метода. Также все другие объекты (Request.Form) и т. Д. В этом контексте кажутся NULL. Я могу сделать это с $.get, но я думаю, что я должен выполнять любые операции с побочными эффектами с помощью POST. Я использую ASP.NET MVC 1.0, jQuery 1.2.6 и Internet Explorer 7.

Спасибо!

Обновление : см. Мой ответ ниже и смиренные извинения

Ответы [ 4 ]

6 голосов
/ 11 мая 2009

Извините, ребята, у меня на странице была запись $ .ajaxSetup, которая переопределяла тип содержимого по умолчанию для application / json.

При использовании стандартного типа содержимого следующим образом:

$.ajax({ url,
         type: "POST",
         contentType: "application/x-www-form-urlencoded",
         success: function(result) { alert(result); },
         data: { name: "John" }
        });

Это работает, потому что processData имеет значение true по умолчанию, что означает, что запись данных с объектом JSON будет проанализирована в строку (data: "name = John" также работает).

Извините, что потратил ваше время :) и спасибо Марку за предложение о передаче объектов JSON, в следующий раз я сделаю это, потому что это выглядит очень круто.

2 голосов
/ 11 мая 2009

Я считаю, что ваш код должен работать, ваш URL-адрес правильный и ваши маршруты настроены правильно? Кроме того, вы всегда можете запустить Fiddler , чтобы точно узнать, каков ваш запрос к серверу и если вы передаете правильные элементы.

1 голос
/ 11 мая 2009

Это не так просто, как создать объект json и бросить его в действие.

Начните с здесь . Люди написали небольшие сценарии, которые готовят объект JSON и готовы к действию, чтобы прочитать его и сопоставить со свойствами или аргументами.

1 голос
/ 11 мая 2009

Может быть, метод Save (имя строки) ожидает строковый JSON? Попробуйте это:

$.post(url,
"{'name':'John'}", function(result){
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...