Ich möchte eine Projektstruktur mit verschachtelten Bereichen erstellen. Zum Beispiel habe ich einen "Home" -Bereich und darunter möchte ich den "News" -Bereich, der seine eigene Routenregistrierung abwickelt und die richtigen Ansichten findet, wenn eine Route auf einen Controller im "News" -Bereich zeigt. Durch Ändern des Bereichsnamens "News" in "Home / News" anstelle von "News" werden die richtigen Ansichten gefunden. In der Hauptdatei Global.asax.cs instanziiere ich alle Bereiche ("Home" und "News") und registriere sie einzeln, da die Funktion "RegisterAllAreas ()" Bereiche nur eine Ebene tief findet (dh sie findet und registriert nur den "Home" "Bereich).
Hat jemand anderes etwas Ähnliches versucht? Ist das ein großer Hack oder kann dies eine stabile langfristige Lösung sein? Jeder Rat, den Sie anbieten können, wird sehr geschätzt.
Sie können es mit MvcCodeRouting , einem separaten Open-Source-CodePlex-Projekt, machen.
MvcCodeRouting erstellt automatisch die bestmöglichen Routen für Ihre ASP.NET MVC-Anwendung.
- Organisieren Sie Ihre Controller mithilfe von Namespaces (keine weiteren Bereiche) , die so tief gehen können, wie Sie möchten .
- Standardbedingungen für primitive Typen, die pro Parameter oder pro Site überschrieben werden können.
- Intelligente Gruppierung ähnlicher Routen für effizientes Matching.
- Unterstützung für einen Root-Controller.
- Erkennung von mehrdeutigen Routen.
- Formatierung von Routen (z. B. Kleinschreibung).
- Rendern Sie Ihre Routen als Aufrufe der MapRoute-Erweiterungsmethode zum Debuggen.
- Verwenden Sie dieselbe namespace-basierte Basisroute zum Organisieren Ihrer Ansichten.
Ich glaube, dass das Erstellen von etwas so mit den Controllern kein Problem sein wird, da sie mit Namespace gefunden werden.
Das Problem ist mit den Ansichten.
Standardmäßig verwendet das MVC-Routing (über die ViewEngine) nur die Werte für Area, Controller und View in der RouteData-Auflistung.
Dies wird in der VirtualPathProviderViewEngine in virtuellen FindView-Methoden implementiert (und mit nicht virtuellem GetPath). Sie müssen die FindView-Methoden in Ihrer ViewEngine überschreiben.
Es ist keine sehr große oder komplizierte Menge Code, aber Ihre beste Wette ist es, durch die Quelle zu gehen und herumzuschnüffeln, weil es etwas Caching gibt und einige andere Dinge ...
Tags und Links asp.net-mvc .net asp.net-mvc-2 asp.net-mvc-areas