2009-06-29 17 views
6

Ho pensato che sarebbe stato abbastanza facile, ma sono totalmente sconcertato.ASP.NET MVC Routing Root Level Views

Desidero che le viste di un controller siano al livello principale dell'applicazione, piuttosto che in una sottodirectory per quel controller, ma non riesco a capirlo.

Mi piacerebbe avere queste due URL:

/Info - Questo dovrebbe azione "Info" sul regolatore "Home"

/Amministratore/- Questo dovrebbe essere l'azione "Index" (default) sul controller "Admin"

Finora non importa quello che ho provato, il primo percorso finirà per catturare entrambi. Non riesco a separare i due.

Questa pagina Info non ha nemmeno bisogno di un controller, è statica, ma io voglio usare una pagina master. Potrebbe esserci un modo molto più semplice per farlo, ma non l'ho neanche capito.

Tutto quello che posso pensare che funzionerebbe, sarebbe quello di creare un controller Info, e spostare Views/Home/Info a Views/Info/Index, ma che ha un certo odore ad esso.

sono stato in grado di fare questo in rotaie utilizzando:

map.connect ':controller/:action/:id' 
    map.connect ':action', :controller => 'home' 

risposta

6

Hai solo bisogno di percorsi adeguati. Nel tuo caso:

routes.MapRoute(
       "Info", 
       "Info", 
       new { controller = "Home", action = "Info" } 

routes.MapRoute(
       "Admin", 
       "Admin", 
       new { controller = "Admin", action = "Index" } 

Ma io ti consiglio l'approccio this.

Se è necessario modificare la posizione fisica predefinita delle viste/visualizzazioni parziali,
check out how to creare motori di visualizzazione personalizzati.

+0

Non pensare a instradarli staticamente, modo di appendere il dito sul trovare il modello! Sembra ancora che ci dovrebbe essere un modo più dinamico, quindi non devo aggiungere una nuova rotta per ogni pagina. –

+0

Ho pensato lo stesso, ma non sono più così ottimista. Ad ogni modo, il routing tramite attributi mi sembra una pallottola d'argento. :) –

+0

Quasi come se ci fosse una barra finale implicita così alla fine "/ Info" e "/ Admin /" finiscono per colpire la stessa strada perché "/ Info" viene trattato come "/ Info /". E viceversa; se ordino nuovamente i percorsi, il primo percorso cattura ancora entrambi. In questo caso è come se trattasse "/ Admin /" come "/ Admin". Sto verificando il routing basato su attributi. Sicuramente sembra promettente. –

0

È possibile utilizzare Route Attributes.

Nel file di configurazione del percorso che si dovrebbe avere.

 routes.MapMvcAttributeRoutes(); 
     AreaRegistration.RegisterAllAreas(); 
     //code below should already be in your route config by default 
     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

Quindi sopra ogni azione è possibile avere un attributo di percorso.

[Route("info")] 

È possibile anche ottenere più avanzato con questi attributi con l'aggiunta di parametri, e/o sottocartelle

[Route("blog/posts/{postId}")] 

È possibile inserire l'attributo di cui sopra a qualsiasi azione, e apparirà come se fosse proveniente da il controller del blog. Tuttavia, non hai nemmeno bisogno di un controller di blog. Anche il {} indica il parametro, quindi assicurati che la tua azione stia prendendo gli stessi parametri di quelli contenuti nelle parentesi graffe. In questo caso il parametro sarebbe

string postId 
Problemi correlati