99 votes

Avoir un problème avec plusieurs contrôleurs du même nom dans mon projet

Je suis en cours d'exécution dans l'erreur suivante avec mon ASP.NET MVC 3 projet:

Plusieurs types ont été trouvés qui correspondent à le contrôleur nommé "Maison". Cela peut se produire si la route que les services de cette demande ("Accueil/{action}/{id}") n' spécifiez pas les espaces de noms à la recherche d'un contrôleur qui correspond à la demande. Si c'est le cas, inscrire ce itinéraire en appelant à une surcharge de l' 'MapRoute" méthode qui prend un 'espaces de noms de paramètre.

La demande pour la "Maison" a trouvé le suivant correspondance des contrôleurs: MyCompany.MyProject.WebMvc.Les contrôleurs.HomeController MyCompany.MyProject.WebMvc.Les zones.De l'entreprise.Les contrôleurs.HomeController

J'ai un contrôleur HomeController dans mon contrôleur par défaut du dossier, avec un nom de classe de la Société.MyProject.WebMvc.Les contrôleurs.HomeController.

Mon RegisterRouters méthode, dans mon global.asax, ressemble:

    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
        );
    }

J'ai ensuite une zone appelée Société, avec un contrôleur HomeController dans le contrôleur par défaut le dossier de la zone, avec un nom de classe de la Société.MyProject.WebMvc.Les zones.De l'entreprise.Les contrôleurs.HomeController.

Le RegisterArea méthode dans le CompanyAreaRegistration fichier ressemble à ceci:

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

C'est tous des chefs de file de l'erreur je l'ai souligné au début de ce post. J'ai du mal à reconstituer le puzzle d'une solution à partir de divers autres postes, avec PAS de CHANCE.

Est-il possible d'avoir un contrôleur HomeController par défaut dans le dossier controllers et puis, un dans CHAQUE région? Si oui, dois-je le faire (en supposant que ce que je fais) des modifications à mon fichier de configuration pour faire ce travail?

Toute aide serait grandement appréciée!

172voto

David Ruttka Points 8105

Le message d'erreur contient la solution recommandée: "Si c'est le cas, inscrire cette route en appelant à une surcharge de la "MapRoute" méthode qui prend un "espaces de noms" du paramètre."

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

Cela va faire http://server/ aller à votre contrôleur HomeController l'Index de l'action qui est, je pense, ce que vous voulez. http://server/company/home iront à la Société de la zone HomeController l'Index de l'action, tel que défini dans la zone d'enregistrement.

30voto

cooloverride Points 91

C'est l'approche asp.net mvc4:

  routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "RegisterNow", id = UrlParameter.Optional },
            namespaces: new[] { "YourCompany.Controllers" }
        );
 

2voto

T Gupta Points 209

Une autre cause plausible de ce problème pourrait être trouvée ci-dessous:

Plusieurs types ont été trouvés qui correspondent au contrôleur nommé 'Home'

2voto

cracker Points 1385

utilisez ceci

 routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new[] { "ProjectName.Controllers" }
        );
 

1voto

glownet Points 1

Utilisez uniquement le nom du projet:

 Public Class RouteConfig
    Public Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
        routes.MapRoute( _
            name:="Default", _
            url:="{controller}/{action}/{id}", _
            defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
           , namespaces:={"MvcAreas"})  
    End Sub
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X