2012-07-15 16 views

Respuesta

9

ActionLink método de ayuda representará una etiqueta anchor, haciendo clic en lo que siempre es una solicitud GET. Si desea hacer una solicitud POST.Debe reemplazar el behviour por defecto con un poco de javacsript

@ActionLink("Delete","Delete","Item",new {@id=4},new { @class="postLink"}) 

Ahora algunos jQuery código

<script type="text/javascript"> 
    $(function(){ 
    $("a.postLink").click(function(e){ 
     e.preventDefault(); 
     $.post($(this).attr("href"),function(data){ 
      // got the result in data variable. do whatever you want now 
      //may be reload the page 
     }); 
    });  
    });  
</script> 

Asegúrese de que tiene un método de HttpPost tipo Action manejar esta solicitud

[HttpPost] 
public ActionResult Delete(int id) 
{ 
    // do something awesome here and return something  
} 
4

Lo que me gustaría hacer es envolver su html alrededor de una forma

@using(Html.BeginForm("YourAction","YourController", FormMethod.Post)){ 

<button>Hello</button> 

} 

En lugar de utilizar un enlace es posible que desee utilizar un botón.

Si realmente desea usar un enlace, es posible que tenga algo de JavaScript

Algo como esto:

$("#idOfYourLink").click(function(){ 
var form = $(this).parents('form:first'); 
form.submit(); 
}); 
0

Si cree ... no hay ninguna etiqueta de enlace en HTML que hace un ENVIAR. Y es por eso que no puedes forzar un enlace para hacer un POST (y no tiene ningún sentido). Para usar "POST", debe "enviar" algo. Y ese algo debe ser una forma, o puede hacer una POST utilizando una función de JavaScript para AJAX. De todos modos, si necesita enviar por correo sin publicar nada, debe revisar su modelo de recursos, algo huele mal.

+0

Esto es realmente bastante común y perfectamente aceptable en la comunidad de Rails, por ejemplo, como una forma de objetos lete. – wgpubs

1

No es posible tener un elemento <a> realizar una POST a un servidor web.

Puede usar Javascript para capturar el evento de clic, detener la navegación y realizar una POST de AJAX en el servidor, pero si el usuario tiene el Javascript deshabilitado no sucederá nada.

¿Tiene que usar un elemento <a>, o simplemente algo que se asemeja a un elemento <a>?

También vale la pena mencionar es echar un vistazo a AjaxLink. Le permite usar fácilmente un elemento <a> para realizar una POST AJAX.

7

Supongo que si necesita algo así es para una acción que hará algo "permanente" en el lado del servidor. Por ejemplo, eliminar un objeto en la base de datos.

Aquí es un ejemplo completo de hacer una supresión mediante un enlace y aviso: http://www.squarewidget.com/Delete-Like-a-Rock-Star-with-MVC3-Ajax-and-jQuery

Desde el anterior enlace (recomendado la lectura de todos modos):

Un enlace borrar en su opinión:

@Ajax.ActionLink("Delete", "Delete", "Widget", 
       new {id = item.Id}, 
       new AjaxOptions { 
        HttpMethod = "POST", 
        Confirm = "Are you sure you want to delete this widget?", 
        OnSuccess = "deleteConfirmation" 
       }) 

Un poco de JS:

function deleteConfirmation(response, status, data) { 

     // remove the row from the table 
     var rowId = "#widget-id-" + response.id; 
     $('.widgets').find(rowId).remove(); 

     // display a status message with highlight 
     $('#actionMessage').text(response.message); 
     $('#actionMessage').effect("highlight", {}, 3000); 
    } 
+1

excelente enlace. desearía poder marcar 2 respuestas como correctas, así que espero que un voto ascendente sea suficiente. gracias – wgpubs

+0

El enlace ya no funciona –

+0

Enlace actualizado ... – Romias

Cuestiones relacionadas