Asp.net mvc 3 MVC3 RouteHandler结果忽略已解析路由中的区域-为什么?
我正在将MVC3应用程序分为两个区域。现有的应用程序将进入一个领域(V1),我们将在第二个领域(V2)开始重新设计 我已将视图、模型、控制器等全部移动到MyApp\Areas\V1\xxx文件夹中,并且我已经能够验证在大多数情况下加载的内容是否正常。我将V1的所有路由注册移到V1AreaRegistration.cs文件中,并将其修改为使用Asp.net mvc 3 MVC3 RouteHandler结果忽略已解析路由中的区域-为什么?,asp.net-mvc-3,c#-4.0,asp.net-mvc-areas,asp.net-mvc-3-areas,mvcroutehandler,Asp.net Mvc 3,C# 4.0,Asp.net Mvc Areas,Asp.net Mvc 3 Areas,Mvcroutehandler,我正在将MVC3应用程序分为两个区域。现有的应用程序将进入一个领域(V1),我们将在第二个领域(V2)开始重新设计 我已将视图、模型、控制器等全部移动到MyApp\Areas\V1\xxx文件夹中,并且我已经能够验证在大多数情况下加载的内容是否正常。我将V1的所有路由注册移到V1AreaRegistration.cs文件中,并将其修改为使用context.MapRoute,而不是RouteTable.Routes.MapRoute 通过Phil Haack的RoutedBugger查看路由,一切
context.MapRoute
,而不是RouteTable.Routes.MapRoute
通过Phil Haack的RoutedBugger查看路由,一切看起来都很好-我的V2路由正在按其应该的方式解决,基本的V1路由工作正常。不起作用的是V1路由,其中我定义了一个自定义的MvcRouteHandler
,如下所示:
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);
如果我从这个调用中删除\u 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}
参数执行一些验证工作,如果无效,则重定向到错误页面
救命 找到了问题。我们为上面提到的
AreaRegistrationContext
提供了一个扩展方法(context.MapRoute
)-在该方法中,我没有正确设置route.DataTokens[“Area”]
值,因此当它试图查找视图时,它不会在区域中查找
将以下行添加到myAreaRegistrationContext
扩展方法解决了问题:
route.DataTokens["Area"] = context.AreaName;