/ / Passando Parâmetros de JQuery para a Ação do Controlador no ASP.NET MVC 3 - jquery, asp.net-mvc-3

Passando Parâmetros de JQuery para a Ação do Controlador no ASP.NET MVC 3 - jquery, asp.net-mvc-3

Eu tenho uma página da web que está usando o JQuery paracomunicar com o backend. Eu tenho algumas ações do POST. No entanto, agora eu tenho uma ação GET e notei que os valores de parâmetro passados ​​para ele são nulos. Minhas ações de POST funcionam muito bem. Eu não consigo descobrir o porquê.

Do meu arquivo .html, tenho a seguinte consulta do 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
});

No meu controlador, tenho:

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

Minha rota é configurada da seguinte maneira:

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

Eu tenho um palpite de que estou perdendo alguma coisa na minharota. Mas eu não tenho certeza do que é. Eu segui a mesma sintaxe que usei com minhas ações de POST. Parâmetros com essas ações funcionam muito bem. Mas os parâmetros com minhas ações GET, como a acima, têm valores nulos. , o que estou fazendo errado e se eu precisar passar vários parâmetros?

Muito obrigado pela sua ajuda!

Respostas:

4 para resposta № 1

O JsonValueProviderFactory que permite enviar solicitações JSON para ações do controlador no ASP.NET MVC 3 funciona com solicitações POST. Para solicitações GET, você pode usar uma solicitação padrão:

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

Ou se você quiser enviar solicitações JSON, modifique type: "POST" no seu pedido AJAX. Obviamente, neste caso, você terá que remover o HttpVerbs.Get atributo de sua ação do controlador que atualmente o restringe a somente solicitações GET.