【问题标题】:Ajax.Actionlink in View in Areas folder not hitting the Controller's ActionResult区域文件夹中视图中的 Ajax.Actionlink 未命中控制器的 ActionResult
【发布时间】:2014-01-15 20:14:30
【问题描述】:

我很难将 Ajax.Actionlink 连接到正确的控制器 ActionResult。

我的项目的 Areas 文件夹中有一个 View 页面(路径是 Areas/Feed/Views/Feed/Feed.cshtml) 并且控制器在同一个文件夹中(路径是(Areas/Feed/Controllers/FeedController.cs

在 Feed.cshtml 中,我有一个简单的 Ajax.Actionresult,如下所示:

@Ajax.ActionLink("Most Popular", "SortMostPopular", "Feed", new { Area = "Feed", UserLoginId = Model.FeedModel.UserLoginId }, new AjaxOptions { UpdateTargetId = "fd-div-feed" }, new { @role = "menuitem", @tabindex = "-1" })

还有ActionResult方法:

public ActionResult SortMostPopular(long UserLoginId)
{
    return PartialView();
}

ajax.Actionlink 应该通过 long 类型的 UserLoginId 发送给方法并返回一个 Partialview。出于测试目的,它还没有做任何事情,我在 return PartialView() 之前放置了一个断点以查看它是否会到达那里 - 但它没有:'(

相反,当我单击该链接时,它会使用整个视图本身刷新 TargetId(在本例中为 div)fd-div-feed。这让我发疯了哈哈。有谁知道为什么会这样?我不想刷新整个页面,只刷新目标元素。

另外....我检查了源代码,我正确地引用了 unobtrusive、jquery 和所有这些。

谢谢!

编辑:

这是我的 javascript 文件,按此顺序排列:

@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/bootstrap_offcanvas")
@Scripts.Render("~/Scripts/Helpers/ScrollbarHelper.js")
@Scripts.Render("~/Scripts/jquery.json2.js")

【问题讨论】:

  • 检查浏览器的开发控制台以监控网络请求的详细信息。 ActionLink 的默认 HttpMethod 是 GET,因此您可能会看到旧的缓存结果(因此您不会遇到断点)。
  • 我检查了控制台。 jquery.unbtrusive 文件似乎有问题?我收到一个错误:'Empty string passing to getElementById().' on line fn = fn[parts.shift()]; where fn is undefined??
  • 您可能以错误的顺序包含了 javascript 库。确保 jquery 在 jquery.unobtrusive 之前。请张贴您的 javascript 包括,以便我们确保一切正常。
  • 我刚刚更新了我的帖子。谢谢!
  • 假设 jqueryval 包含 jquery.unobtrusive-ajax.js,顺序看起来是正确的。

标签: jquery ajax asp.net-mvc-4


【解决方案1】:

我会尝试以下方法:

1) 确保您明确引用了不显眼的 ajax 库。

我知道这似乎微不足道,但从我读过的问题来看,几乎总是这样。

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

2) 确保您的捆绑脚本正确排序。

如果您使用通配符,它​​会按字母顺序对它们进行排序,这通常不是您想要的。 我无法从您的问题中看出这一点,因为 RegisterBundles 是加载实际脚本文件的位置。

【讨论】:

    【解决方案2】:

    我终于弄清楚为什么没有触发。我的路线配置不正确,需要稍微更改一下。 我最初有类似的东西:

    Feed/{Username}
    

    但这需要改为:

    Feed/{Username}/{action}/{id} 
    

    以适应其他方法调用。因此,如有疑问,请检查您的路线配置!

    【讨论】:

      猜你喜欢
      • 2018-01-27
      • 2012-10-06
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多