在MVC5中发出ajax请求时发出

时间:2015-10-01 10:39:36

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

我在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 }
        );

2 个答案:

答案 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