我有一个内置了几个区域的MVC 3应用程序,其中一个区域是我网站的管理部分。一切都很好。我想尝试使用MvcContrib Portable Areas来使我的应用程序更加模块化,所以我安装了MvcContrib,经过一些试验和错误后,我开始运行了几个便携式区域。
然后我决定将我的管理区域移动到便携区域,因此我创建了新项目并删除了我的管理员便携区域。我不得不重命名我的本地管理区域,以免它发生冲突。在将一些代码移动到Admin PA的同时,我决定不想将所有Telerik和我连接到管理区域的其他内容移动到头痛。所以我将事情移回主项目区域并删除了Admin PA。
我重新管理了我的管理区域并查看了设置区域所涉及的所有内容。现在,对于我的生活,我无法在我的主项目中加载任何区域。我一直得到“资源无法找到”。错误信息。
我甚至删除了对MvcContrib和Portable Areas的引用,但仍然没有运气。因为我不知道如何调试这个,所以我已经走到了尽头。我使用了自定义路由处理程序以及Glimpse,但在抛出错误时它们都没有用。
这是我的global.asax
中的路线routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
null,
new string[] { "CoolProject.Web.Controllers" }
);
这是我的管理区域注册文件中的路由
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "CoolProject.Web.Areas.Admin.Contollers" }
);
这是我的Global.asax
public static void RegisterRoutes(RouteCollection routes)
{
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
new string[] { "CoolProject.Web.Controllers" }
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
InitializeContainer();
AppStart_Structuremap.Start();
SiteMapManager.SiteMaps.Register<XmlSiteMap>("AdminNavigation", sitemap => sitemap.LoadFrom("/Areas/Admin/AdminNavigation.sitemap"));
}
我已经针对类似的工作站点检查了我的设置,除了命名空间和类之外,一切都是一样的。
我正在开发Win 7 IIS7.5
使用Glimpse Routes插件我可以看到路由存在,但问题是我的Global.axas文件中的路由正在接管对这些区域的所有请求。
我的路线需要做什么才能让核心应用和相关区域相处?有趣的是我有另一个生产应用程序使用的工作区域很好。
...更新
我创建了一个新的MVC 3项目,添加了一个名为Admin的区域。然后我编辑了AdminAreaRegistration.cs和Global.asax文件,在MapRoute语句中包含命名空间,编译它并完美运行。我可以毫无问题地进入该区域。
然后我将Global.asax和AdminAreaRegistration.cs与我破坏的项目中的文件进行了比较,它们是相同的。这不是我如何设置我的路线的问题,我认为还有另一个我没有看到的问题。
答案 0 :(得分:3)
你在打电话吗
AreaRegistration.RegisterAllAreas();
在Global.asax中的Application_Start上?你用什么服务器开发Cassini,IISExpress,IIS?
在查看更详细的信息后进行编辑。
如果您有此代码,请在您的管理区域注册文件中
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "CoolProject.Web.Areas.Admin.Contollers" }
);
我认为“CoolProject.Web.Areas.Admin.Contollers”中存在拼写错误,它应该是“CoolProject.Web.Areas.Admin.Controllers”吗?
答案 1 :(得分:1)
确保控制器中的命名空间正确无误。例如,如果您通过从另一个MVC应用程序复制MVC组件来创建新区域(就像我一样),很容易忘记更改命名空间!