【问题标题】:Ajax.ActionLink calling controller twiceAjax.ActionLink 调用控制器两次
【发布时间】:2011-09-08 19:41:44
【问题描述】:

当我点击 Ajax.ActionLink 时,它会调用我的控制器两次。

<td id = @tdTag>
   @Ajax.ActionLink("LL-" + item.getProjectAbbreviation(item.projectID.Value) + "-" + item.prjLessonID, "Details",
                    new { id = item.lessonID },
                    new AjaxOptions
                        {
                          HttpMethod = "POST",
                          UpdateTargetId = "details",
                          InsertionMode = InsertionMode.InsertAfter ,
                          OnSuccess = "showDetails()"

                         }) 

我的控制器看起来像这样...

   public ActionResult Details(int id)
    {
        using (LLDataContext storeDB = new LLDataContext())
        {
            var lesson = (from l in storeDB.lessons
                          where l.lessonID == id
                          select l).SingleOrDefault();

            return PartialView(lesson);

        }
    }

【问题讨论】:

  • 能否提供javascript方法showDetails的实现?

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


【解决方案1】:

我刚刚遇到了同样的问题,我发现我已经加载了两次“jquery.unobtrusive-ajax.js”。我删除了第二个实例,一切正常。要查看实际情况,只需添加 3 次并使用 Confirm AjaxOption 创建一个 @Ajax.ActionLink(...)。您将获得多次确认。

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

【讨论】:

  • 非常感谢您的解决方案,为我节省了大量时间。
  • 是的,这就是问题所在! (在我的情况下,每次更新运行时,页面的 ajax 更新都会重新包含该 js 文件。将包含移动到该 ajax 调用返回的 html 之外,问题就消失了。)
  • 如果您使用捆绑包,并且您已使用以下代码包含验证: bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery.unobtrusive* ","~/Scripts/jquery.validate*"));这可能会导致类似的行为,请指定不带 * 的 js
  • 超级,节省了很多时间!,是的,它被加载了两次,现在问题消失了!....
  • @anAgent 它没有解决我的问题,但它给了我解决问题的提示。谢谢!
【解决方案2】:

只使用一个js,而不是两个

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

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

它会解决你的问题。

【讨论】:

    【解决方案3】:

    anAgent 的回答帮助我解决了这个问题,但作为一个附加组件,我会提到,就我而言,对“jquery.unobtrusive-ajax.js”的多个引用位于不同的文件中;一个在 myView.cshtml 中,另一个在 _Layout.cshtml 中。

    【讨论】:

      【解决方案4】:

      确保您已将 jquery 不显眼的脚本包含到您的页面中(除了 jquery):

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

      并且您在 web.config 中启用了不显眼的 javascript

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

      此外,为了进一步诊断此类问题,我建议您使用一些工具,该工具可以让您准确了解 HTTP 级别发生的情况。 FireBug 非常适合这种分析。它还将显示您可能遇到的任何可能的 javascript 错误,它会显示或不显示 AJAX 请求,这将为您提供更多信息,无论是执行 AJAX 请求还是正常请求,......有用的东西。

      【讨论】:

      • @crocaduck81,您看到 FireBug 中发送的 AJAX 请求了吗?
      • 我愿意,它发送了两次请求。
      【解决方案5】:

      只需检查这个 jquery 参考

      src="~/Scripts/jquery.unobtrusive-ajax.min.js"
      

      可能是你在视图中添加了两次 或

      bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
          "~/Scripts/jquery.unobtrusive*",
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-13
        • 2011-03-31
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多