2010-06-14 14 views
13

Ho un metodo POST dichiarato nel mio controller:MVC Ajax.ActionLink non trova metodo POST

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UpdateComments(int id, string comments) 
{ 
    // ... 
} 

e un ActionLink a mio avviso:

<%= Ajax.ActionLink("update", "UpdateComments", 
         new { id = Model.Id, comments = "test" }, 
         new AjaxOptions { 
           HttpMethod="POST", 
           OnFailure="alert('fail');", 
           OnSuccess = "alert('success');" 
          })%> 

ottengo "non trovato "Errore nel tentativo di instradare questa richiesta.

Se rimuovo la restrizione POST dal metodo UpdateComments nel controller, funziona correttamente.

Cosa mi manca?

risposta

7

Sembra che non mi piacesse il modo in cui stavo dichiarando i miei callback OnFailure e OnSuccess. Immagino che non possa analizzare il mio oggetto AjaxOptions così ignoravo l'impostazione HttpMethod="POST".

ho ottenuto che funziona modificando a:

OnFailure="function() { alert('fail'); }", 
OnSuccess="function() { alert('success'); }" 
0

FormCollection ha un raccoglitore di default ad esso associati, che sempre inizializza la raccolta e si dovrebbe mai ottenere nulla. È più probabile che tu disponga di una raccolta vuota quando si utilizza Ajax.ActionLink in contrasto con quando si utilizza un pulsante di invio modulo . Questo perché il metodo ActionLink non carica i valori del modulo quando esegue la richiesta AJAX . This post is the unswer to you question

4

sto imparando ASP.MVC in questo momento e ho avuto quel problema con il mio Ajax.ActionLink, ho ottenuto un metodo GET e non un metodo POST come dovrebbe era stato. Poi mi rendo conto che non ho aggiunto gli script di riferimento libreria:

<script src=”/Scripts/MicrosoftAjax.js” type=”text/javascript”></script> 
<script src=”/Scripts/MicrosoftMvcAjax.js” type=”text/javascript”></script> 

Dopo aver aggiunto lo script ha funzionato benissimo!

+2

Questi sono obsoleti in MVC3 e MVC4. Vedi: http://stackoverflow.com/a/8784998/210780 – ashes999

0

prova tra cui

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script> 
+1

Benvenuti in Stack Overflow! Potresti per favore approfondire perché questo aiuterà? Gran parte di una buona risposta non è solo la comprensione della soluzione, ma la comprensione del perché le cose erano un problema, tanto per cominciare! – tmesser

+0

Questi sono obsoleti in MVC3 e MVC4. Vedi: http://stackoverflow.com/a/8784998/210780 – ashes999