2010-02-09 53 views
8

Aquí es una línea de código en mi clase de controlador:post action for url.action?

return JavaScript(String.Format("window.top.location.href='{0}';", Url.Action("MyAction", "MyController"))) 

¿Hay una manera de hacer que use la versión de verb=postMyAction?

Respuesta

12

No puede usar POST simplemente navegando a una URL diferente. (Que es lo que harías cambiando la ubicación. Href.)

Usar POST solo tiene sentido cuando se envían algunos datos. No está claro desde su código qué datos se POSTearán realmente.

Si realmente desea iniciar una POST mediante javascript, intente utilizarla para enviar un formulario.

+0

consiguió. gracias, rod – Rod

2

Continuando fuera de la respuesta de Matt Lacey, su acción podría devolver un poco de Javascript que hace esto:

  1. usar jQuery para añadir una nueva forma a la DOM
  2. usar jQuery para enviar el formulario recién agregado

Algo como esto: (código no probado)

var urlHelper = new UrlHelper(...); 
var redirectUrl = urlHelper.Action("MyAction", "MyController"); 

var redirectScript = String.Format(@" 
    var formTag = $('<form action=""{0}"" method=""post"" id=""redirectForm""></form>'); 
    $(body).append(formTag); 
    formTag.submit();" 
    , redirectUrl 
); 

return JavaScript(redirectScript); 
17

vine Acros s el mismo problema y lo resolvió usando un atributo data- y algo de jQuery. El beneficio de hacerlo de esta manera es que aún obtiene la URL correcta cuando coloca el mouse sobre el enlace, aunque realice un POST. Tenga en cuenta que Html.BeginForm contiene la acción predeterminada en caso de que el usuario presione la tecla Intro.

HTML (ASP.NET MVC3 Razor)

@using (Html.BeginForm("Quick", "Search")) 
{ 
    <input type="text" name="SearchText" /> 
    <a href="@Url.Action("Quick", "Search")" data-form-method="post">Search</a> 
    <a href="@Url.Action("Advanced", "Search")" data-form-method="post">Advanced</a> 
} 

jQuery

$("a[data-form-method='post']").click(function (event) { 
    event.preventDefault(); 
    var element = $(this); 
    var action = element.attr("href"); 
    element.closest("form").each(function() { 
     var form = $(this); 
     form.attr("action", action); 
     form.submit(); 
    }); 
}); 
+1

Me encanta. ¡Gracias! – panhandel