2010-09-16 12 views
8

Vorrei creare una struttura di progetto con aree nidificate. Ad esempio, ho un'area "Home" e al di sotto di questa vorrei l'area "Notizie" che gestisce la propria registrazione del percorso e troverà correttamente le viste quando un percorso punta a un controller nell'area "Notizie". Cambiando il nome dell'area "Notizie" come "Casa/Notizie" anziché semplicemente "Notizie", vengono trovate le viste corrette. Nel Global.asax.cs principale, istanzio tutte le aree ("Home" e "News") e le registro singolarmente perché la funzione RegisterAllAreas() trova solo le aree ad un livello profondo (cioè trova e registra solo la "Home " la zona).Le aree nidificate sono possibili in ASP.NET MVC 2?

Qualcun altro ha provato qualcosa di simile? Questo è un grosso trucco o può essere una soluzione stabile a lungo termine? Ogni consiglio che puoi offrire è molto apprezzato.

+0

Uno dei vantaggi di ASP.NET MVC è l'URL più semplice e leggibile. Più nidifichi le aree, più gli URL saranno lunghi e meno saranno amichevoli. Hai davvero bisogno di nidificare? Solo un pensiero (e mi dispiace, non conosco la risposta alla tua domanda). –

risposta

1

Credo che la creazione di qualcosa di simile con i controller non costituirà un problema, perché vengono trovati utilizzando lo spazio dei nomi.

Il problema è con le viste.

Per impostazione predefinita, il routing MVC (tramite ViewEngine) utilizza solo i valori Area, Controller e Visualizza nella raccolta RouteData.

Questo è implementato in VirtualPathProviderViewEngine in metodi virtuali FindView (e utilizzando GetPath non virtuale). Dovrai sostituire i metodi FindView nel ViewEngine.

Non è una quantità molto grande o complicato di codice, ma la soluzione migliore sta attraversando la sorgente e curiosare in giro, perché c'è un po 'di caching andare in giro e alcune altre cose ...

4

È possibile farlo con MvcCodeRouting, un progetto CodePlex open source seprate.

MvcCodeRouting crea automaticamente i percorsi migliori possibili per l'applicazione ASP.NET MVC.

  1. Organizza i tuoi controller utilizzando namespace (non più aree) che può andare in profondità quanto si vuole.
  2. Vincoli predefiniti per i tipi di primitivi che possono essere sostituiti per ogni singolo parametro o per sito.
  3. Raggruppamento intelligente di percorsi simili per una corrispondenza efficiente.
  4. Supporto per un controller di root.
  5. Rilevamento di percorsi ambigui.
  6. Formattazione di percorsi (ad esempio, renderli in lettere minuscole).
  7. Renderizza i percorsi come chiamate al metodo di estensione MapRoute, per il debug.
  8. Utilizzare lo stesso percorso di base basato sullo spazio dei nomi per l'organizzazione delle viste.
+0

+1 per collegamento utile, ma in generale le risposte che sono solo collegamenti a un altro sito sono molto meglio quando hanno un testo esplicativo aggiuntivo o almeno una citazione pertinente dal link. Ho aggiunto una citazione e ho evidenziato la parte rilevante che effettivamente risponde alla domanda. –

+0

@ Samuel Neff: Grazie per la modifica, ho risposto di fretta. –

Problemi correlati