2010-10-07 19 views
1

Je construis mon premier site Asp.Net MVC2, et j'essaie maintenant d'ajouter une zone/Admin au site.Corriger le processus de routage avec le sous-site administrateur

Je ne veux pas être ce domaine au principal visibile ensemble des utilisateurs ne sera donc accessible lorsque vous entrez http://Intranet/Admin

Ce que j'est un NewsController pour mes utilisateurs réguliers, mais je veux aussi un administrateur NewsController et je ne suis pas sûr de savoir comment configurer la hiérarchie des classes et les dossiers de sorte que lorsque j'ajoute les vues, ils sont dans l'emplacement correct.

A l'intérieur de mon Global.Asax.cs j'ai ajouté et les routes se résolvent correctement.

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

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

Et dans la hiérarchie des dossiers que j'ai installé

Views/ 
    Admin/ 
    News/ 
     ...I want the new view to go here... 

Dans les contrôleurs

Controllers/ 
    Admin/ 
     AdminController.cs 
     NewsController.cs (this is the one i want for administration) 
    NewsController.cs (this is the regular one for viewing the list, specific item etc) 

Le problème est quand je fais face, je vais dans les admin/NewsController.cs sur Index et Add View essaye de le créer sur /News/Index.aspx plutôt que /Admin/News/Index.aspx.

C'est le code pour mon contrôleur nouvelles admin Contrôleurs/Admin-> Ajouter-> Contrôleur

namespace Intranet.Controllers.Admin 
{ 
    public class NewsController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 
    } 
} 

Y at-il quelque chose que je fais mal, ou que dois-je changer pour que quand j'ajoute les vues ils sont créés dans le répertoire/Admin/{area}.

Répondre

1

Puisque vous utilisez MVC2, le moyen le plus simple de résoudre ce problème est de créer une «zone» MVC pour votre section Admin. En ce moment, vous faites tout dans la section par défaut et en utilisant simplement un dossier Admin. Si vous créez un dossier Admin (sous le dossier Areas bien connu), vous aurez un AdminAreaRegistration - où vous pourrez configurer vos routes administratives. Comme vous le ferez dans le cadre de la zone, le premier segment de l'URL "/ Admin" sera utilisé pour le jeton "zone". Cela va désamorcer le contrôleur à utiliser et ramasser correctement le contrôleur que vous voulez. Donc, vous êtes la structure de dossier sera:

/Areas 
    /Admin 
     /Controllers 
      NewsController.cs 
etc. 
+0

Merci. Il a fallu un peu de temps pour comprendre les étapes supplémentaires du contrôleur pour séparer les 2 zones, mais tout va bien maintenant –

0

Lorsque vous essayez de créer une vue pour l'action de contrôleur existante, elle est toujours créée dans le dossier racine des vues. L'itinéraire par défaut de la vue pointe toujours vers la racine du dossier Views.

Par exemple:

Controllers 
    Admin 
     AdminController.cs 
     HomeController.cs 
    HomeController.cs 

Dans cette hiérarchie, les deux HomeController à l'intérieur des actions d'administration et racine les mêmes vues dans le dossier Vues.

Views 
    Home 
     Index.aspx 

À moins que vous renvoyez un View() spécifié dans tous les ActionResults dans votre HomeController dans le dossier Admin de vos contrôleurs. Il sera mappé à une certaine vue. Exemple: ActionResult dans HomeController.cs du dossier Admin dans Contrôleurs.

namespace Intranet.Controllers.Admin 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View("Home/Index"); 
     } 
    } 
} 

Ce sera mis en correspondance dans le dossier Vues comme ce

Views 
    Admin 
     Home 
      Index.aspx 

Mais si vous ne spécifiez pas le chemin de vue lorsque vous retournez une vue dans votre ActionResult il sera carte à l'emplacement par défaut du Vues qui est comme ça.

Views 
    Home 
     Index.aspx 

La raison est que même si vous spécifiez les routes du Global.asax, qui est seulement à la carte à quel contrôleur l'URL doit pointer, pas le dossier Vues.

Lorsque vous cliquez avec le bouton droit et Créer une vue sur ActionResult de n'importe quels sous-niveaux des contrôleurs, il crée toujours à la racine du dossier Views à son contrôleur correspondant.