Ajax.ActionLink导航

时间:2012-03-01 20:00:25

标签: asp.net-mvc-3 asp.net-ajax

我有一个成功调用我的控制器操作的Ajax.ActionLink,但它没有使用返回值更新目标,而是导航到新页面并显示返回值。

我在视图中有一个不显眼的ajax脚本

<script src="../../Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>

这些脚本位于我的布局页面

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

这是我的行动链接:

<span id = "status">Account is Active</span> 
@Ajax.ActionLink("Deactivate", 
                "Deactivate", 
                "Lender", 
                new {id = Model.ID}, 
                new AjaxOptions {
                                HttpMethod = "GET",
                                Confirm = "Confirm Deactivation",
                                UpdateTargetId = "status"
                                })

我的控制器操作:

public string Deactivate(int id) {
    var status = "Account is Active";
    ... // call method to deactivate account
    ... // set status = "Account is Inactive"
    return status;
}

正确设置返回值。那么为什么页面导航而不是做Ajax应该做的事情,坚持下去?

2 个答案:

答案 0 :(得分:4)

您需要在页面中加入jquery.unobtrusive-ajax.min.js库:

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

请注意我是如何将它包含在我的答案中的,这是正确的方法。 就像这样:

<script src="../../Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>

永远不要在ASP.NET MVC应用程序中硬编码URL。始终使用Url帮助程序。

还要确保在web.config中启用了不显眼的ajax:

<appSettings>
    <add key="webpages:Version" value="1.0.0.0"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

确保您已完全删除了所有Microsoft*.js脚本的痕迹。这些都是完全过时的,根本不应该使用。

答案 1 :(得分:0)

MicrosoftMvcAjax.js包含在您的脚本列表中。

关于听力不再需要,我不完全确定这是多么真实,我只是发现在使用AjaxHelper扩展方法时,该文件似乎使所有工作都成功 - 的现成。

我注意到MS的CDN没有显示MVC 4的MicrosoftMvcAjax.js文件,因此可能是使用纯jQuery切换到的版本,但我不能完全确定。