2010-06-17 3 views
6

Sto cercando di passare a un'azione MVC inviando piuttosto che ottenere. (L'azione è una DELETE, e io non lo voglio raggiungibile con un link esterno.)Ajax.ActionLink non è distacco

Sto usando un link in una griglia generata da

Ajax.ActionLink("Remove", "Delete", new { saID = Model.Said, id = e.id }, new AjaxOptions { HttpMethod = "POST", Confirm = "Are you sure you want to delete this item?" }) 

che genera il seguente codice HTML:

<a href="/Equipment/Delete/102424/229933" onclick="Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, confirm: 'Are you sure you want to delete this item?', httpMethod: 'POST' });">Remove</a> 

Il mio problema è che quando faccio clic sul collegamento, raggiungo l'azione Elimina tramite GET anziché POST, E la finestra di dialogo di conferma non sta avendo luogo. Ho fatto ricerche su Google per diverse ore e continuo a farmi avvolgere attorno all'asse. Che cosa sto facendo di sbagliato?

risposta

6

E 'probabile che abbiate qualche altro errore javascript nella pagina che impedisce il javascript che gestisce l'AJAX POST esecuzione. In questo caso, il collegamento ricade sul comportamento predefinito (GET). La cosa più semplice da fare è utilizzare gli strumenti di sviluppo di IE8 o Firefox/Firebug (io preferisco questi) e guardare per vedere se si dispone di eventuali errori nella console quando la pagina viene caricata o la vostra azione viene richiamato. Se si utilizza Internet Explorer è necessario utilizzare Internet Options -> Advanced e deselezionare Disable script debugging.

risolvere il tuo errore di javascript e penso che sarà semplicemente iniziare a lavorare.

+1

Il vostro diritto: sto diventando "Sys.Mvc" non è definito - anche se ho incluso tutte e tre le file di script JS nel mio MasterPage (MicrosoftAjax, MicrosoftMvcAjax e jquery-1.4.1-vsdoc) Cos'altro devo fare per ottenere Sys.Mvc definito? –

+0

@Dave - li stai includendo in questo ordine? 'Sys.Mvc' è definito in MicrosoftMvcAjax.js ma lo fa chiamando un metodo da MicrosoftAjax.js – tvanfosson

+0

Questo sembra essere il problema. Quando ho collegato il fiddler ad esso, solo il primo (MicrosoftAjax.js) dei tre file di script stava caricando. Ho risolto il problema in modo che MicrosoftMvcAjax.js (che contiene la definizione di Sys.Mvc) si stava caricando, e ha funzionato e decollato - beh, sorta. Sto ricevendo la casella di conferma ora, ma non ricevo il mio modulo di cancellazione. Ma ci penserò domani. –

5

ho voluto aggiungere questo come un commento sotto risposta accettata, ma in qualche modo non v'è alcuna possibilità di entrare in questo come un commento quindi l'aggiunta di questo come risposta

Nel mio caso, ho dovuto aggiungere "jquery.unobtrusive-ajax .min.js "prima di MicrosoftAjax.js e MicrosoftMvcAjax.js e quindi il link di azione ha iniziato l'avvio di una richiesta Ajax. Ma questo era un GET e volevo post in modo ho solo aggiunto HttpMethod = "Post" nel 'AjaxOptions`. Era così.