2012-02-11 57 views
6

Tengo una página web que utiliza JQuery para comunicarse con el servidor. Tengo algunas acciones de POST. Sin embargo, ahora tengo una acción GET y me he dado cuenta de que los valores de los parámetros pasados ​​son nulos. Mis acciones POST funcionan bien. No puedo entender por qué.Pasar parámetros de JQuery a Acción del controlador en ASP.NET MVC 3

De mi archivo html, tengo el siguiente jQuery consulta:

var vm = { emailAddress:"[email protected]" }; 
$.ajax({ 
    url: "/myService/myAction", 
    type: "GET", 
    data: JSON.stringify(vm), 
    contentType: "application/json", 
    success: myAction_Succeeded, 
    error: myAction_Failed 
}); 

En mi controlador, tengo:

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

Mi ruta se configura como sigue:

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

Tengo la corazonada de que me falta algo en mi ruta. Pero no estoy seguro de qué se trata. Seguí la misma sintaxis que utilicé con mis acciones POST. Los parámetros con esas acciones funcionan bien. Pero los parámetros con mis acciones GET, como el anterior, tienen valores nulos. Mi pregunta es, ¿qué estoy haciendo mal y qué pasa si necesito pasar múltiples parámetros?

¡Muchas gracias por su ayuda!

Respuesta

4

La JsonValueProviderFactory que le permite enviar solicitudes JSON a las acciones del controlador en ASP.NET MVC 3 funciona con solicitudes POST. Para peticiones GET se puede utilizar una solicitud estándar:

var vm = { emailAddress:"[email protected]" }; 
$.ajax({ 
    url: "/myService/myAction", 
    type: "GET", 
    data: vm, 
    success: myAction_Succeeded, 
    error: myAction_Failed 
}); 

O si desea enviar peticiones JSON modificar type: 'POST' en su petición AJAX. Obviamente, en este caso, deberá eliminar el atributo HttpVerbs.Get de su acción de controlador, que actualmente lo limita a solo solicitudes GET.

+0

¡muchas gracias por su ayuda! –

Cuestiones relacionadas