【问题标题】:Ajax.ActionLink navigates awayAjax.ActionLink 导航离开
【发布时间】:2012-03-20 08:32:15
【问题描述】:

我有一个 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 应该做的事情,原地不动?

【问题讨论】:

  • MicrosoftMvcAjax.js在哪里?
  • 使用 jQuery 时不再需要 Microsoft 文件
  • @BradChristie 只是为了验证我还包含了 MicrosoftMVCAjax 文件并且它开始工作了......我很困惑为什么每个人都说不再需要这些文件并使用 jquery 来代替功能删除它们而丢失。 TekPub MVC 培训建议删除它们,Phil Haacks MVC 3 pro book 也是如此...
  • 据我了解,AjaxHelper 扩展方法依赖于该库。您可以使用 jQuery 实现自己的调用(基本上是从库停止的地方开始),但它本机使用该文件。我个人对此知之甚少,我只记得我对 Ajax 和 MVC 做了什么我需要那个文件。也许抓住该文件的调试版本,看看实际使用的是什么?
  • 好的,明白了,谢谢。如果您想将其添加到答案中,我会接受。

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


【解决方案1】:

您需要将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 脚本的痕迹。这些已经完全过时了,根本不应该使用。

【讨论】:

  • @CDSmith,不,它不存在。您没有正确包含它。您已经硬编码了路径。您必须使用 url 助手。仔细看我的回答。还要确保您已从页面中删除所有 Microsoft*.js 脚本,并且您已在 web.config 中启用不显眼的 AJAX。
  • 它可能是硬编码的,但它在那里并且在浏览器中返回得很好,你只是在吹毛求疵。正如我之前所说,我还认为 Microsoft* 文件现在是不必要的,首选方法是 jquery。所以只需验证一下,我删除了硬编码脚本并使用了 URL Helper,我删除了所有 MS 文件并按照您的说明设置了 web.config。这导致我使用 MS 文件的工作解决方案停止工作。因此,当您回答是在做所有“正确”的事情时,它是行不通的。
  • 我设法让你的方法奏效。我必须从一个干净的解决方案开始并解决它。我的第一个解决方案一定有问题。感谢您的帮助,谢谢
【解决方案2】:

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

关于不再需要听到它,我不完全确定那是多么真实,我只发现在使用 AjaxHelper 扩展方法时,该文件似乎使这一切都正常工作了-盒子。

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

【讨论】:

  • -1。从 ASP.NET MVC 3 开始,MicrosoftAjax*.js 已完全过时。
  • @Darin:如果不是原始问题的 cmets,我什至不会发布答案。不过,我很高兴您现在回答这个问题并且能够解释它。
猜你喜欢
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
相关资源
最近更新 更多