1

我想不通。

如何解决问题?

AdminAreaReistration cs

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

路由配置

        public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
    }

在此处输入图像描述

4

1 回答 1

2

根据错误图片,您可以在声明一个区域时使用不同的命名空间,RegisterArea以避免默认路由和区域路由之间的命名冲突:

AdminAreaRegistration.cs

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "CMSAdmin_default",
        "CMSAdmin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional },
        new[] { "cms.site.Areas.CMSAdmin.Controllers" } // Insert area namespace here
    );
}

RouteConfig.cs

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional },
        namespaces: new[] { "cms.site.Controllers" } // Insert project namespace here
    );
}

错误的可能原因Multiple types were found that match the controller name

1)在不同区域使用相同的控制器名称(这可能是您当前的问题),

2)重命名项目名称空间/程序集名称(删除/bin目录中的旧项目名称DLL文件然后清理并再次重建),

3) 同名但不同版本的引用之间的冲突(删除旧的引用然后重构)。

参考:

找到了多种与名为“Home”的控制器匹配的类型

在我的项目中存在多个同名控制器的问题

于 2016-11-18T01:12:52.193 回答