2011-09-21 3 views
6

Utilizzo di MVC3, C# e Razor View Engine: Ho un modulo con un collegamento Azione Ajax. Nelle opzioni sto provando a specificare le chiamate di funzione OnBegin e OnComplete javascript. In questa domanda, ho eliminato la carne delle funzioni e ho semplicemente aggiunto degli avvisi in modo che potessi verificare le funzioni in cui essere colpito. Quello che voglio veramente fare con queste funzioni è usare $ .blockUI per la durata della chiamata ajax.MVC3 - Ajax actionlink - OnBegin, onComplete

Il codice pertinente è simile al seguente:

@Ajax.ActionLink("my test link", "myAction", new { Controller = "myController" }, new AjaxOptions { OnBegin = "ajaxStart", OnComplete = "ajaxStop" }) 

<script type="text/javascript"> 
    function ajaxStart() { 
     alert("start"); 
    } 

    function ajaxStop() { 
     alert("stop"); 
    } 

</script> 

Per qualche ragione, le due funzioni non arrivano mai chiamato come specificato. Ho provato con e senza le parentesi, Sucha come questo:

@Ajax.ActionLink("my test link", "myAction", new { Controller = "myController" }, new AjaxOptions { OnBegin = "ajaxStart()", OnComplete = "ajaxStop()" }) 

Né lavoro.

Qualche idea?

Grazie, Tony

risposta

13

Assicurati di aver inserito il seguente script alla pagina:

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

e di aver attivato ajax discreto nel web.config:

<appSettings> 
    ... 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings> 

In ASP.NET MVC 3 javascript discreto viene utilizzato con jQuery in modo che tu non includa gli script appropriati, gli attributi HTML5 data- * che vengono emessi dal gli helper HTML non vengono interpretati e non viene inviata alcuna richiesta AJAX.

+0

Grazie. La tua risposta mi ha indotto a ricontrollare il riferimento allo script e ho scoperto che era sbagliato. Una volta corretto, tutto funziona. Grazie ancora! –

3

È possibile provare a mettere il blocco <script> prima della chiamata al metodo Ajax.ActionLink. Utilizzare questa sintassi per il collegamento Ajax:

@Ajax.ActionLink("my test link", "myAction", "myController", new AjaxOptions { OnBegin = "ajaxStart", OnComplete = "ajaxStop" }) 

e ricordarsi di mettere l'importazione di jquery.unobtrusive-ajax.min.js nella vista o in _Layout.cshtml

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