我已向我的 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 中注册了区域之后,我立即清除了我刚刚拥有的内容
感谢您的帮助…它最终导致了我的救赎!