【问题标题】:jQuery AJAX load not executing on ASP.NET MVC Controller ActionjQuery AJAX 加载未在 ASP.NET MVC 控制器操作上执行
【发布时间】:2010-01-12 15:43:22
【问题描述】:

我有一个简单的事情要做:两个 div 和两个加载部分的调用(以 PartialView 作为结果的控制器操作)。

我正在处理两个控制器操作:Index 和 ItemDetail。 jQuery 加载在 Index 操作返回的视图中起作用,但在 ItemDetail 上不起作用。

这些项目在同一个控制器中,您可以在浏览器中访问它们,如下所示: http://[site]/items http://[site]/items/itemdetail

为了隔离问题,我设置了 Index 和 ItemDetail 以返回具有相同语法的视图:

<div id="deptTickets">Loading department tickets...</div>
<div id="recentTickets">Loading recent tickets...</div>

<script type="text/javascript" language="javascript">
    $("#deptTickets").load("items/DepartmentTickets");
    $("#recentTickets").load("items/RecentTickets");
</script>

.load 方法触发并为索引加载适当的局部视图,但不为 ItemDetail 加载。

我认为唯一不同的是路线。事实上,如果我在索引中返回“详细”视图,它会正确呈现并且 jQuery 运行,如果我在 itemDetail 的控制器操作中返回“索引”视图,它会呈现页面但从不执行 jQuery。

有什么想法吗?

【问题讨论】:

    标签: jquery asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    您需要使 URL 相对于站点根目录,否则您的路由将不正确。最好使用 Url 帮助器。

    <script type="text/javascript" language="javascript"> 
        $("#deptTickets").load("<%= Url.Action( "DepartmentTickets", "Items" ) %>"); 
        $("#recentTickets").load("<%= Url.Action( "RecentTickets", "Items" ) %>"); 
    </script>
    

    【讨论】:

    • 太棒了,辛苦了...应该想到这一点,因为我需要使用 site.master 中的 Url 帮助程序来让脚本首先运行。万分感谢。干杯! -jc
    • 我运行了这段代码并评估了浏览器中的输出,发现了错误(也与 Craig 的响应有关)。将我最初发布的代码更改为以下工作: $("#deptTickets").load("/items/DepartmentTickets");唯一的区别是项目控制器之前的正斜杠。再次感谢。 -jc
    • 只要应用程序不在网站的子文件夹中,它就可以工作。如果应用程序不在文档根目录中,那么硬编码相对于文档根目录的路径最终会在您不期望的时候咬住您。这就是为什么我总是使用 UrlHelper 来生成路径。它了解应用程序的虚拟路径是什么,并始终生成正确的 url。
    【解决方案2】:

    您使用的是相对 URI,因此它将附加到当前 URI。由于那是一个不同的地方,您的 AJAX 请求可能是 404ing。使用 Firebug 的网络面板或 Fiddler 来确认这一点。

    【讨论】:

    • 谢谢,克雷格,对你的回复很有用,但我还不值得;o)。干杯,-jc
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2014-08-28
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多