2011-09-21 20 views
6

Uso de MVC3, C# y el motor de Razor View: Tengo un formulario que tiene un enlace de Acción Ajax. En las opciones, intento especificar OnBegin y OnComplete llamadas a funciones de JavaScript. En esta pregunta, saqué la carne de las funciones y simplemente agregué alertas para poder verificar que las funciones fueran golpeadas. Lo que realmente quiero hacer con estas funciones es usar $ .blockUI durante la llamada ajax.MVC3 - Ajax actionlink - OnBegin, onComplete

El código correspondiente es el siguiente:

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

Por alguna razón, las dos funciones no serán llamadas como se especifica. Lo he intentado con y sin paréntesis, así como así:

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

Tampoco trabajo.

¿Alguna idea?

Gracias, Tony,

Respuesta

13

Asegúrese de que ha incluido la siguiente secuencia de comandos a su página:

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

y que ha habilitado ajax discreta en su web.config:

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

En ASP.NET MVC 3, javascript no intrusivo se usa con jQuery, por lo que si no incluye los scripts adecuados, los atributos de datos HTML5 * emitidos por el Los helpers html no se interpretan y no se envía ninguna solicitud AJAX.

+0

Gracias. Su respuesta me hizo verificar dos veces la referencia del guión y descubrí que estaba equivocada. Una vez corregido, todo está funcionando. ¡Gracias de nuevo! –

3

Puede intentar colocar el bloque <script> antes de la llamada al método Ajax.ActionLink. Utilice esta sintaxis para el enlace ajax:

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

y recuerda poner la importación de jquery.unobtrusive-ajax.min.js en la vista o en _Layout.cshtml

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