2009-11-17 10 views
10

Come posso fare in ASP.NET MVC 1, per prendere sottocartelle. Ad esempio, prendendo la seguente struttura di cartelle sul controller:Creare sottocartelle nel controller

/Controller 
    /Blog 
    ViewsController.cs 
    ArticlesController.cs 
    /Customers 
    SalesController.cs 
    ProductsController.cs 
    HomeController.cs 

Vorrei avere la seguente struttura di cartelle in vista, ogni vista trovato il controller:

/Views 
    /Blog 
    /Views 
     Index.aspx 
     Admin.aspx 
     Show.aspx 
    /Articles 
     Show.aspx 
     Admin.aspx 
    /Customers 
    /Sales 
     Index.aspx 
     Totals.aspx 
    /Products 
     Index.aspx 
     Promotions.aspx 
    /Home 
    Index.aspx 

risposta

4

Si potrebbe fare utilizzando Routes, vale a dire

routes.MapAreaRoute("Blogs", 
     "Blog/Views/{controller}/{action}/{id}", 
     new { controller = "Views", action = "Index", id = "" }); 

che sembrerebbe soddisfare le vostre esigenze riportati i dati sopra riportati.

+1

Nota che MapAreaRoute è stato rimosso da MVC 2.0 ed è stato implementato in modo diverso ora. C'è un articolo in svedese qui potrebbe passare attraverso Google Translate. http://weblogs.asp.net/mikaelsoderstrom/archive/2009/10/02/areor-i-asp-net-mvc-2.aspx. –

8

Questa è una caratteristica che ha stato aggiunto in ASP.NET MVC 2.0. Si chiama Areas.

+0

effettivamente mostra la risposta lì come farlo in MVC1 anche io credo di testa. – bastijn

+0

Spiacente, avrei dovuto chiarire prima che sto lavorando con "MVC1. C'è una soluzione per" MVC1 " –

1

Come ha affermato Darin, le aree sembrano essere il modo "previsto" per gli sviluppatori di realizzare ciò. Se puoi aspettare fino a febbraio, potresti prendere in considerazione l'utilizzo dell'anteprima di MVC 2. Tuttavia, gli sviluppatori stavano facendo cose simili prima dell'introduzione di Aree con MVC 2. Se hai bisogno di una soluzione più immediata, puoi mettere i controller nella struttura delle cartelle che hai specificato sopra. Supponendo che i controller siano nominati in base alla loro cartella (ad esempio Project.Controllers.Blog), è sufficiente aggiungere un parametro aggiuntivo alla fine che specifica lo spazio dei nomi per il controller quando si inizializzano i percorsi.

Ad esempio:

routes.MapAreaRoute("Blog", 
    "Blog/{controller}/{action}/{id}", 
    new { controller = "Articles", action = "Index", id = "" }, 
    "Project.Controllers.Blog"); 
3

In MVC 2 o superiore, basta fare clic destro sul progetto, poi aggiungere mouse, quindi fare clic su Area, e inserire nel nome della zona. Tutto viene creato automaticamente per te!