我正在将 MVC3 应用程序拆分为两个区域。现有应用程序正在进入一个区域 (V1),我们正在开始重新设计第二个区域 (V2)。
我将视图、模型、控制器等都移到了 MyApp\Areas\V1\xxx 文件夹中,并且我已经能够验证大部分内容是否正在加载。我将 V1 的所有 Route 注册移动到 V1AreaRegistration.cs 文件中,并将其修改为使用context.MapRoute
而不是RouteTable.Routes.MapRoute
.
使用 Phil Haack 的 RouteDebugger 查看路由,一切看起来都不错——我的 V2 路由正在按应有的方式解析,并且基本的 V1 路由正常工作。什么不起作用是我有一个自MvcRouteHandler
定义定义的 V1 路由,例如:
context.MapRoute(
"MyRouteName",
"{myRouteVal}/{controller}/{action}",
new { area = "V1", controller = "DefaultController", action = "Index" },
new { controller = _someRouteConstraint},
new string[] { "My.Custom.Project.WebLibrary.Areas.V1.Controllers" },
_myCustomRouteHandler);
如果我_myCustomRouteHandler
从此调用中删除 ,它会很好地工作并将我发送到 V1 区域下的正确视图。有了它,路由似乎忽略了它被注册为区域路由的事实,我得到一个黄色错误页面,上面写着:
The view 'Index' or its master was not found or no view engine
supports the searched locations. The following locations were searched:
~/Views/DefaultController/Index.cshtml
~/Views/DefaultController/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml
~/Views/DefaultController/Index.aspx
~/Views/DefaultController/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
我需要能够使用路由处理程序——它对{myRoutVal}
参数进行一些验证工作,如果它无效则重定向到错误页面。
帮助!!