Je rencontre l'erreur suivante avec mon projet ASP.NET MVC 3:
Plusieurs types ont été trouvés qui correspondent au contrôleur nommé «Home». Cela peut se produire si la route qui traite cette demande ('Home / {action} / {id}') ne spécifie pas d'espaces de noms pour rechercher un contrôleur qui correspond à la demande. Si tel est le cas, enregistrez cette route en appelant une surcharge de la méthode 'MapRoute' qui prend un paramètre 'namespaces'.
La demande "Accueil" a trouvé les contrôleurs correspondants suivants: MyCompany.MyProject.WebMvc.Controllers.HomeController MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
J'ai un HomeController dans mon dossier de contrôleur par défaut, avec un nom de classe MyCompany.MyProject.WebMvc.Controllers.HomeController.
Ma méthode RegisterRoutes, 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 alors une zone appelée Company, avec un HomeController dans le dossier du contrôleur par défaut pour la zone, avec un nom de classe MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController.
La méthode RegisterArea dans le fichier CompanyAreaRegistration ressemble à ceci:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Company_default",
"Company/{controller}/{action}/{id}",
new { area = "Company", action = "Index", id = UrlParameter.Optional }
);
}
Tout cela mène l'erreur que j'ai soulignée au début de cet article. J'ai du mal à essayer de trouver une solution à partir de divers autres messages, sans aucune chance .
Est-il possible d'avoir un HomeController dans le dossier des contrôleurs par défaut, puis un dans CHAQUE zone? Si tel est le cas, dois-je apporter des modifications (en supposant que je le fasse) à mon fichier de configuration pour que cela fonctionne?
Toute aide serait très appréciée!
Réponses:
Le message d'erreur contient la solution recommandée: «Si tel est le cas, enregistrez cette route en appelant une surcharge de la méthode 'MapRoute' qui prend un paramètre 'namespaces'.»
Cela permettra à http: // server / d' accéder à l'action Index de votre HomeController qui est, je pense, ce que vous voulez. http: // server / company / home ira à l'action Index du HomeController de la zone Société, comme défini dans l'enregistrement de la zone.
la source
namespaces
paramètre est un tableau de chaînes, vous devriez donc pouvoir passer n'importe quel nombre en ajoutant au tableau:new string[] { "MyCompany.MyProject.WebMvc.Controllers", "My.Second.Namespace", "My.Third.Namespace", "Namespaces.Etc" }
MyProject.Controllers
fait cependant.MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
classe est en cours d'exécution. Mais la vue qui apparaît est l'ancienne.Voici l'approche asp.net mvc4:
la source
J'avais renommé les espaces de noms, donc, je ne supprime que les dossiers bin et obj et reconstruit , travaille à nouveau.
la source
Une autre cause plausible de ce problème peut être trouvée ci-dessous:
Plusieurs types ont été trouvés qui correspondent au contrôleur nommé «Accueil»
la source
utilisez ceci
la source
Utilisez uniquement le nom du projet:
la source
Si vous utilisez RazorGenerator, informez simplement le
namespaces
paramètre peut ne pas suffire.Je dois résoudre en ajoutant la déclaration indiquée ci-dessous à
Global.asax.cs
:la source
Comme Chris Moschini le mentionne, le paramètre namespaces peut ne pas être suffisant si vous avez deux zones avec le même nom de contrôleur avec des espaces de noms différents et la route aucune zone par défaut renverra une erreur de serveur 500.
Il est "préférable" de remplacer le gestionnaire d'itinéraire par défaut et d'ajouter cette ligne:
la source
J'ai eu ce problème après avoir ajouté une référence à un autre projet qui avait les mêmes itinéraires et le problème a continué après avoir supprimé la référence.
Résolu en supprimant le fichier .dll de cette référence ajoutée du dossier bin et en le reconstruisant.
la source
Comme beaucoup d'autres, j'ai eu ce problème après avoir créé un nouveau projet de modèle MVC à partir du menu VS2017, lors de la construction du projet, j'obtiendrais le message d'erreur de l'opération. J'ai ensuite utilisé la réponse https://stackoverflow.com/a/15651619/2417292 publiée plus tôt dans ce fil par cooloverride pour les projets mvc4. Cela n'a toujours pas résolu mon problème, j'ai donc renommé mon dossier de vue d'accueil et mon fichier HomeController en dossier de vue Company / et fichier de contrôleur CompanyController. Cela a ensuite fonctionné pour moi, pas un correctif en soi, mais une solution de contournement si vous n'êtes pas bloqué sur l'itinéraire Accueil / Index mon autre problème était que je ne trouvais pas la référence à l'origine de l'erreur et que ma plate-forme de développement était Azure WebApplication par rapport à un VM complète avec un système de fichiers complet et des paramètres IIS pour jouer avec.
la source
J'ai eu le même problème et j'ai trouvé que l'ancienne version avait créé des fichiers compilés dans le dossier "bin".
Une fois que j'ai supprimé ces derniers, l'erreur a disparu.
la source