0

我正在将 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}参数进行一些验证工作,如果它无效则重定向到错误页面。

帮助!!

4

1 回答 1

1

发现了问题。我们有一个您在AreaRegistrationContext上面提到的扩展方法(context.MapRouteroute.DataTokens["Area"]

将以下行添加到我的AreaRegistrationContext扩展方法中解决了该问题:

route.DataTokens["Area"] = context.AreaName;
于 2011-06-24T03:24:57.387 回答