索引的默认路由不适用于新控制器

时间:2014-06-26 15:48:18

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

我的应用程序顶部的导航栏有以下代码:

<li>@Html.ActionLink("Users", "Index", "Account")</li>
<li>@Html.ActionLink("Models", "Index", "Models")</li>

在AccountController中,我有以下索引函数:

        [Authorize(Roles = "Admin, CanEditGroup, CanEditUser")]
        public ActionResult Index()
        {
            var users = _db.Users;
            var model = new List<EditUserViewModel>();
            foreach (var user in users)
            {
                var u = new EditUserViewModel(user);
                model.Add(u);
            }
            return View(model);
        }

在ModelsController中,我有以下索引函数:

        public ActionResult Index()
        {
            return View();
        }

当我点击“用户”链接时,我将被带到“/帐户”并正确显示索引。但是,当我点击“模型”链接时,我被带到'/ Models'并收到'HTTP Error 403.14 - Forbidden'错误。当我调试这个时,我可以看到'ModelsController'中的Index函数没有被命中。 '/ Models / Index'工作得很好。

应该注意的是,我正在使用AccountController已经存在的模板。我已经添加了ModelsController。

最后,这是我的简单路由文件:

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

请帮助我理解AccountController和ModelsController之间的区别,这会导致路由行为的差异。

1 个答案:

答案 0 :(得分:5)

我认为您的项目中已经有一个模型文件夹或其他具有命名模型的资源。 你可以改变你的控制器名称。

或为您的路线集设置RouteExistingFiles

routes.RouteExistingFiles = true;

会有所帮助