2011-09-21 12 views
6

Używanie MVC3, C# i maszynki Razor View Engine: Mam formularz, który ma link Ajax Action. W opcjach próbuję określić wywołania funkcji javascript OnBegin i OnComplete. W tym pytaniu wyjąłem mięso z funkcji i po prostu dodałem ostrzeżenia, dzięki czemu mogłem zweryfikować, które funkcje zostały uderzone. Tym, co naprawdę chcę zrobić z tymi funkcjami, jest użycie $ .blockUI na czas trwania wywołania ajax.MVC3 - Ajax actionlink - OnBegin, onComplete

Stosowny kod wygląda następująco:

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

Z jakiegoś powodu, nigdy obie funkcje sprawdzony zgodnie ze specyfikacją. Próbowałem go z nawiasami i bez nich, tak jak to:

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

Żadna praca.

Wszelkie pomysły?

Dzięki, Tony

Odpowiedz

13

Upewnij się, że włączone poniższy skrypt do swojej strony:

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

i które zostały włączone dyskretne Ajax w Twojej web.config:

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

w ASP.NET MVC 3 dyskretny JavaScript jest używana z jQuery tak UIF nie zawierają odpowiednich skryptów, HTML5 data- * atrybuty, które są emitowane przez Pomocnicy html nie są interpretowani i nie jest wysyłane żadne żądanie AJAX.

+0

Dziękuję. Twoja odpowiedź spowodowała podwójne sprawdzenie referencji skryptu i okazało się, że była ona zła. Po poprawieniu wszystko działa. Dzięki jeszcze raz! –

3

Można spróbować umieścić <script> blok przed wywołaniem Ajax.ActionLink metody. Użyj tej składni dla łącza ajax:

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

i pamiętać, aby umieścić import jquery.unobtrusive-ajax.min.js w widoku lub w _Layout.cshtml

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