2009-05-11 2 views
3

У меня нет проблем с обработкой запросов JQuery GET в контроллере, однако я не могу получить данные формы в POST. Клиент фрагментПараметр контроллера NULL при использовании jQuery POST и ASP.NET MVC

$.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.

Спасибо!

Update: см мой ответ ниже и смиренные извинения

ответ

6

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

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

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

Это работает, потому что ProcessData верно по умолчанию, что означает ввод данных с объектом JSON будет анализироваться в строку (данные: «Имя = Джон» также работает).

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

+1

Спасибо, что разместили исправление. –

+1

Провел час на этом. Спасибо, отвечая на свой вопрос. ;) – Gleno

1

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

$.post(url, 
"{'name':'John'}", function(result){ 
}); 
+0

К сожалению, это не работает - спасибо, хотя! –

1

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

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

+0

Я прочитаю это; кажется, что ссылка ссылается на то, как передать JSON методам действий, которые ожидают сложные пользовательские типы в качестве параметров, - которые я хотел бы сделать дальше !, но на данный момент я просто пытаюсь передать строку, которая, кажется, должна быть направлена ​​вперед - Спасибо –

+1

Да, это правда. Что приятнее в передаче объектов JSON в том, что вы можете писать классные фильтры действий для десериализации и проверки их. Это очень хорошо для AJAX с MVC. Надеюсь, что это поможет, спасибо за ваш комментарий. –

2

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

+0

Спасибо! плохо попробуйте Fiddler. Ive использовал Web Development Helper в IE и, похоже, передал правильному телу запроса метод. –

Смежные вопросы