MVC3 - Ajax actionlink - OnBegin,onComplete

时间:2011-09-21 14:51:28

标签: c# ajax asp.net-mvc-3 overlay

使用MVC3,C#和Razor View引擎: 我有一个具有Ajax Action链接的表单。在选项中我试图指定OnBegin和OnComplete javascript函数调用。在这个问题中,我拿出了函数的内容并简单地添加了警报,以便我可以验证被击中的函数。我真正想要做的就是在ajax调用期间使用$ .blockUI。

相关代码如下所示:

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

由于某种原因,这两个函数永远不会被指定调用。我用括号和没有括号试过它,例如:

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

都没有工作。

有什么想法吗?

谢谢, 贝

2 个答案:

答案 0 :(得分:13)

确保您已将以下脚本包含在您的页面中:

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

并且您已在web.config中启用了不显眼的ajax:

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

在ASP.NET MVC 3中,不引人注目的javascript与jQuery一起使用,因此如果不包含正确的脚本,则不会解释由html帮助程序发出的HTML5 data- *属性,并且不会发送任何AJAX请求

答案 1 :(得分:3)

您可以尝试在<script>方法调用之前放置Ajax.ActionLink块。 将此语法用于ajax链接:

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

并记得在您的视图或jquery.unobtrusive-ajax.min.js

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