我已向我的 MVC3 项目添加了一个新区域,并且我正在尝试从 _Layout 页面链接到新区域。

我使用 Visual Studio 设计器添加区域,以便它具有正确的区域注册类等,并且 global.asax 文件正在注册所有区域。

但是,当我在根目录的页面中使用以下 2 个操作链接时,我遇到了一些问题:

@Html.ActionLink("Admin", "Index", "Meets", new { area = "Admin" }, null)
@Html.ActionLink("Admin", "Index", "Meets", new { area = "" }, null)

单击这两个链接时,我将被带到管理区域中的 Meets 控制器,然后应用程序会抛出一个错误,指出找不到索引页面(即使索引页面存在于"区域"子区域的"视图"文件夹中)

第一个链接的 href 如下所示:

http://localhost/BCC/Meets?area=Admin

第二个链接的 href 如下所示:

http://localhost/BCC/Meets

另外,如果我点击我希望创建的链接:

http://localhost/BCC/Admin/Meets

我刚刚收到资源无法找到错误。

答案

我发现了这一点 - 我创建了一个新的测试项目,并做了与我之前所做的完全相同的事情,并且它有效……然后在进一步检查两个项目之间与路线相关的所有内容后,我发现了差异。

在我的 BCC 应用程序的 global.asax 文件中,有一行莫名其妙地出现的恶意代码:

        public static void RegisterRoutes(RouteCollection routes)
        {
            // Problem here
            routes.Clear();

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

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }

正如你所看到的,我的评论在哪里,在某个时间或其他时间,我在 RegisterRoutes 的开头放置了 paths.Clear() 调用,这意味着在我在 Application_Start 中注册了区域之后,我立即清除了我刚刚拥有的内容

感谢您的帮助…它最终导致了我的救赎!

来自: stackoverflow.com