【问题标题】:Default to Area Controller默认为区域控制器
【发布时间】:2013-01-19 13:05:57
【问题描述】:

对于 ASP.NET MVC 应用程序,我有 2 个控制器,名称为 Home。其中一个控制器在Areas 部分,一个不在。如果有人转到基本路径/,我试图默认使用Areas 部分中的控制器。我的印象是这是可能的。我有以下设置,我认为应该可以做到这一点 -

当我转到/ 时,我仍然被带到MVCArea01/Controllers/ 中的控制器,而不是MVCArea01/Areas/Admin/Controllers/

(如果图片中的代码太小看不清,这里是方法的代码,RegisterRoutes)

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[] {"MVCAreas01.Areas.Admin.Controllers"}  // I believe this code should cause "/" to go to the Areas section by default
    );

}

什么是正确的解决方案?

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas


    【解决方案1】:
    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, 
                area = "Admin" 
           }
    }
    

    【讨论】:

    • 感谢 flem 的回答,但我仍然收到错误消息 - “找到了与名为“Home”的控制器匹配的多种类型。如果为该请求提供服务的路由 ('{controller }/{action}/{id}') 没有指定命名空间来搜索与请求匹配的控制器。如果是这种情况,请通过调用采用“命名空间”的“MapRoute”方法的重载来注册此路由参数。“Home”的请求找到了以下匹配的控制器:MVCAreas01.Areas.Admin.Controllers.HomeController MVCareas01.Controllers.HomeController"
    • 尝试包括你的第四个参数。
    • 我尝试添加第 4 个参数,但是区域中的 HomeController 没有被调用,正在调用另一个 HomeController。
    【解决方案2】:

    @ABogus

    我修改了 AdminAreaRegistration.cs 文件。参考下图

    我还修改了 Route.config 如下。

    我得到了这样的输出

    您可以从https://www.dropbox.com/s/o8in2389e8aebak/SOMVC.zip下载示例项目

    【讨论】:

    • 感谢您的尝试,VeeKayBee。但这没有用。这似乎很难弄清楚。
    • @ABogus 抱歉回复晚了。请检查更新的答案,让我知道你的下一个挑战:)
    • 成功了,VeeKayBee!除了...我在 Global.ascx.cs 文件而不是 RouteConfig.cs 中进行了更改,因为我没有 RouteConfig.cs。那是怎么回事?
    • 没有问题。我认为您正在使用 MVC3。在我的情况下,它的 MVC4。 Routeconfig.cs 包含一个添加所有路由的函数。在 MVC4 中,他们只是分离了将路由添加到另一个类的函数。函数调用仅来自 Global.asax。他们做了一个简单的抽象。感谢@ABogus 的回复。
    【解决方案3】:

    你应该为你的起始页面创建额外的路由,这会将处理引导到正确的控制器:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            "Home_Default",
            "",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new[] { "MVCAreas01.Areas.Admin.Controllers" });
    
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "MVCAreas01.Controllers" }
        );
    }
    

    【讨论】:

    • 感谢您的尝试,阿达斯。但这没有用。这是人们试图回答这个问题的 3 次尝试和 3 次罢工!它仍然把我带到了不在区域/管理部分的 HomeController。
    猜你喜欢
    • 2011-02-08
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2013-08-30
    • 1970-01-01
    相关资源
    最近更新 更多