找到了多种类型的家庭控制器

时间:2013-02-27 13:49:39

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

我需要在新区域放置一个新家,但我有一个错误: 找到了多个匹配名为“Home”的控制器的类型。如果为此请求提供服务的路由('{controller} / {action} / {id}')未指定名称空间来搜索与请求匹配的控制器,则会发生这种情况。如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册此路由。 我的新区域

区/ Administrativo /控制器/ HomeController的

区/ Administrativo /查看/主页

我的AdministrativoAreaRegistration

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Administrativo_default",
            "Administrativo/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

    }

在Global i中

    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 }, new[] { "Preparacao.Gerenciar.Web.Controllers" } // Parameter defaults
        );
    }

1 个答案:

答案 0 :(得分:2)

您应该在区域路径注册中指定命名空间约束(检查命名空间是否正确):

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

与您对主要路线注册的方式相同:

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[] { "Preparacao.Gerenciar.Web.Controllers" }
    );
}