我在mvc5项目中应用ajax请求时遇到了一个非常奇怪的问题。这是我在Index.cshtml中的代码:
$(document).ready(function () {
for (var i = 0; i < 3; i++) {
$.ajax({
type: "GET",
url: "Home/LoadTodayStories",
data: { pageIndex: blockNumber, pageSize: 8, index: i },
dataType: 'html',
async: false,
beforeSend: function () { $("#loadingDiv").show(); },
complete: function () { $('#loadingDiv').hide(); },
success: function (data) {
$('.today-spl').append(data);
},
error: function (e) { alert(e.responseText); }
});
}
});
当我运行我的项目并且没有包括控制器名称和操作方法的整个URL时,此代码可以正常工作。换句话说,如果网址只是&#34; http://localhost:52572/&#34;代码有效,但是当我包含控制器名称和操作方法时,例如&#34; http://localhost:52572/Home/Index&#34;我收到错误说:
无法找到资源。 说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。
请求的网址:/ Home / Home / LoadTodayStories
P.S。我知道错误是什么,我需要从
更改我的ajax请求URL部分url: "Home/LoadTodayStories",
到
url: "LoadTodayStories",
但是在更改此部分后,代码开始使用url&#34; http://localhost:52572/Home/Index&#34;并且不适用于&#34; http://localhost:52572/&#34;。有没有人知道如何在这两种条件下完成这项工作?
我的RouteConfig.cs:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
答案 0 :(得分:1)
硬编码的网址总是给我带来问题,无论如何都是个坏主意。我总是使用网址助手。
url: "@Url.Action("LoadTodayStories","Home")"
如果这是一个单独的javascript文件,其中html助手不可用,只需在视图中添加一个隐藏字段:
<input type="hidden" id="loadTodayStoriesUrl" value="@Url.Action("LoadTodayStories", "Home")" />
然后在你的javascript中,从隐藏的地方获取生成的网址:
url: $('#loadTodayStoriesUrl').val()
答案 1 :(得分:0)
您应始终在网址中包含控制器和操作名称。但请记住,这一切都取决于您的路由配置 - 您可以将特定控制器和操作重新映射到不同的URL。 你可以看看这里:http://stephenwalther.com/archive/2015/02/07/asp-net-5-deep-dive-routing