2010-07-07 5 views
2

Quelqu'un sait-il s'il est possible de déplacer les vues HomeController et Home dans le répertoire Areas? J'essaie de garder mon répertoire racine sympa et propre et éviter les répertoires ~/Views et ~/Controllers si je le peux. En outre, je peux le voir causer une certaine confusion en expliquant que ces dossiers racine sont uniquement pour les pages d'accueil et que tout le reste réside dans le dossier Areas. Cela ne correspond tout simplement pas à mon sens de l'organisation, je suppose.ASP.NET MVC: possible de déplacer "Home" à la zone?

Le plus proche que je suis venu utilise ce qui suit pour ma région d'accueil Inscription d'itinéraire:

context.MapRoute(
    "Home_default", 
    "Home/{action}/{id}", 
    new { controller="Home", action = "index", id = UrlParameter.Optional } 
); 

... Mais cela ne se coince pas tout simplement « www.mydomain.com/ ». Pour cela, j'ai besoin de dire à mon itinéraire "catch all" dans Global.asax d'envoyer en quelque sorte cette requête à ma zone d'accueil. Ajouter simplement area = "Home" aux données de l'itinéraire n'a pas fonctionné. Une requête pour "/" recherche toujours le HomeController et Views dans mon répertoire racine.

Des idées?

+0

C'est la chose la plus proche que j'ai trouvé, mais il ne résout pas question d'avoir des dossiers en double « Vues », « contrôleurs » et « modèles » dans la racine de ma demande: http://forums.asp.net/p/1530007/3706429.aspx –

+0

Trouvé ceci aussi: http://efreedom.com/Question/1-2140208/how-to-set-a-default-route-to- an-area-in-mvc –

+0

Cela semble être le même que (ou très similaire à) cette question mieux-répondu ici: http://stackoverflow.com/questions/2140208/how-to-set-a-default- route-à-un-secteur-dans-mvc – Anthony

Répondre

0
// These additions allow me to route default requests for "~/" to the "home" area 
engine.ViewLocationFormats = new string[] { 
    "~/Views/{1}/{0}.aspx", 
    "~/Views/{1}/{0}.ascx", 
    "~/Areas/{1}/Views/{1}/{0}.aspx", // new 
    "~/Areas/{1}/Views/{1}/{0}.ascx", // new 
    "~/Areas/{1}/Views/{0}.aspx", // new 
    "~/Areas/{1}/Views/{0}.ascx", // new 
    "~/Views/{1}/{0}.ascx" 
}; 
+0

Ce n'est pas très bien expliqué - où va ce code, et que fait-il? – Anthony

+0

Ceci ajoute simplement aux emplacements d'affichage par défaut afin que le moteur de vue recherche des vues dans plus d'endroits. –

0

Il est possible qu'IIS ajoute "default.aspx" ou un nom de document par défaut à l'URL de la demande avant d'appliquer vos itinéraires, auquel cas votre exemple ne fonctionnera pas. (Cela peut être configuré dans IIS.)

Vous auriez besoin d'une route comme celui-ci

context.MapRoute(
    "Home_root" 
    ,"/" 
    ,new { controller="Home", action="index", id=UrlParameter.Optional } 
); 

mais, bien sûr, les routes ne peuvent pas commencer par "/", "~", etc.

ou

context.MapRoute(
    "Home_root" 
    ,"default.aspx{*parameters}" /// or .htm, .asp, .html or whatever IIS may be adding 
    ,new { controller="Home", action="index", id=UrlParameter.Optional } 
); 

HTH. À la hâte, je n'ai pas essayé de compiler quoi que ce soit.

+0

Merci, mais je ne pouvais pas obtenir ce travail. Je suis en train de tester localement avec l'environnement de développement VS. Je l'ai vérifié avec le débogueur de route de Phil Haack et je ne peux toujours pas obtenir la route fourre-tout pointant vers ma zone d'accueil. –

Questions connexes