Передача параметров из JQuery в действие контроллера в ASP.NET MVC 3 - PullRequest
6 голосов
/ 11 февраля 2012

У меня есть веб-страница, которая использует JQuery для связи с бэкэндом. У меня есть некоторые действия POST. Однако теперь у меня есть действие GET, и я заметил, что значения параметров, переданные ему, являются нулевыми. Мои действия POST работают просто отлично. Я не могу понять, почему.

Из моего файла .html у меня есть следующий запрос JQuery:

var vm = { emailAddress:"someone@somewhere.com" };
$.ajax({
  url: "/myService/myAction",
  type: "GET",
  data: JSON.stringify(vm),
  contentType: "application/json",
  success: myAction_Succeeded,
  error: myAction_Failed
});

В моем контроллере у меня есть:

public class MyServiceController : Controller
{
  [AcceptVerbs(HttpVerbs.Get)]
  public ActionResult MyAction(string emailAddress)
  {
    return Json(new { address:emailAddress });
  }
}

Мой маршрут настроен следующим образом:

context.MapRoute(
  "MyAction",
  "myService/{controller}/MyAction",
  new { controller = "MyService", action = "MyAction" }
);

У меня есть догадка, что я что-то упустил в своем маршруте. Но я не уверен, что это такое. Я придерживался того же синтаксиса, который использовал в своих действиях POST. Параметры с этими действиями работают просто отлично. Но параметры с моими действиями GET, как и выше, имеют нулевые значения. У меня вопрос: что я делаю не так и что если мне нужно передать несколько параметров?

Большое спасибо за вашу помощь!

1 Ответ

4 голосов
/ 11 февраля 2012

JsonValueProviderFactory, которая позволяет отправлять запросы JSON для действий контроллера в ASP.NET MVC 3, работает с запросами POST. Для запросов GET вы можете использовать стандартный запрос:

var vm = { emailAddress:"someone@somewhere.com" };
$.ajax({
    url: "/myService/myAction",
    type: "GET",
    data: vm,
    success: myAction_Succeeded,
    error: myAction_Failed
});

Или, если вы хотите отправить JSON-запросы, измените type: 'POST' в вашем AJAX-запросе. Очевидно, что в этом случае вам придется удалить атрибут HttpVerbs.Get из действия контроллера, который в настоящее время ограничивает его только запросами GET.

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