3

我很困惑我可能会说尽管在网站上找到了所有其他帖子。

我的解决方案有两个区域 Front 和 Back,我不想使用默认提供的默认根控制器和视图。

我的FrontAreaRegistration.cs就像:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Front",
        "Front/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        , new[] { "Show.Areas.Front.Controllers" }
    );
}

我的BackAreaRegistration.cs就像:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Back_default",
        "Back/{controller}/{action}/{id}",
        new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }
        , new[] { "Show.Areas.Back.Controllers" }
    );
}

Global.asax一样:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

得到以下异常:

找到了与名为“Home”的控制器匹配的多种类型。如果服务此请求的路由 ('{controller}/{action}/{id}') 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。

'Home' 的请求找到了以下匹配的控制器: Show.Areas.Front.Controllers.HomeController Show.Areas.Back.Controllers.HomeController

问题是我无法从 Front 区域到达 Home 控制器。即使将正确的命名空间添加到 context.MapRoute 方法重载...

任何帮助将不胜感激。

4

1 回答 1

1

引发错误是因为您没有在请求中指定区域名称。由于“默认”路由(来自 Global.asax)与请求匹配,并尝试搜索“主页”控制器的“索引”操作。只要有两个匹配项(两个区域)就会抛出异常。
解决这个问题的方法很少。一种可能是修改 Global.asax:

routes.MapRoute(
   "Default", // Route name
   "{controller}/{action}/{id}", // URL with parameters
   new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
   new[] { "Show.Areas.Front.Controllers" }
).DataTokens.Add("Area", "Front");

但在这种情况下,“默认”路线仅适用于 Front 区域。

于 2012-09-04T23:26:13.717 回答