2012-07-15 12 views

risposta

9

ActionLink metodo helper renderà un tag anchor, facendo clic su quale è sempre una richiesta GET. Se vuoi renderlo una richiesta POST.Si dovrebbe ignorare il behviour predefinito utilizzando un po 'di javacsript

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

Ora alcuni jQuery codice

<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> 

Assicurarsi di avere un metodo di HttpPost tipo Action per gestire questa richiesta

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

Quello che vorrei fare è avvolgere tuo html intorno ad una forma

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

<button>Hello</button> 

} 

Invece di utilizzare un collegamento si potrebbe desiderare di utilizzare un pulsante.

Se davvero si vuole utilizzare un collegamento, potrebbe essere necessario un po 'di javascript

Qualcosa di simile a questo:

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

Se si pensa che ... non c'è tag per il link in HTML che fa un INVIARE. Ed è per questo che non puoi forzare un link per fare un POST (e non ha senso). Per usare "POST", si dovrebbe "POST" qualcosa. E quel qualcosa dovrebbe essere una forma, oppure puoi fare un POST usando una funzione javascript per AJAX. Ad ogni modo, se hai bisogno di POST senza postare qualcosa che dovresti rivedere il tuo resourcemodel, qualcosa puzza.

+0

Questo è in realtà abbastanza comune e perfettamente accettabile nella comunità Rails per esempio come un modo per oggetti lete. – wgpubs

1

Non è possibile che un elemento <a> esegua un POST su un server Web.

È possibile utilizzare Javascript per acquisire l'evento click, interrompere la navigazione ed eseguire un POST AJAX sul server, ma se l'utente ha Javascript disabilitato non accadrà nulla.

Dovete usare un elemento <a>, o semplicemente qualcosa che assomiglia un elemento <a>?

Vale anche la pena di dare un'occhiata a AjaxLink. Consente di utilizzare facilmente un elemento <a> per eseguire un POST AJAX.

7

Suppongo che se hai bisogno di qualcosa del genere è per un'azione che farà qualcosa di "permanente" sul lato server. Ad esempio, eliminazione di un oggetto nel database.

Ecco un esempio completo di fare un'operazione di eliminazione utilizzando un collegamento e il distacco: http://www.squarewidget.com/Delete-Like-a-Rock-Star-with-MVC3-Ajax-and-jQuery

Dal link precedente (raccomandato la lettura in ogni caso):

Un link di eliminazione nella vista:

@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 po 'di 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

ottimo link. Vorrei poter contrassegnare 2 risposte come corrette, quindi speriamo che un upvote sia sufficiente. grazie – wgpubs

+0

Il link non funziona più –

+0

Link aggiornato ... – Romias

Problemi correlati