2010-09-16 12 views
8

Chciałbym utworzyć strukturę projektu z zagnieżdżonymi obszarami. Na przykład mam obszar "Strona główna", a pod tym kątem chciałbym, aby obszar "Wiadomości", który obsługuje własną rejestrację trasy, będzie prawidłowo znajdować widoki, gdy trasa wskazuje kontroler w obszarze "Wiadomości". Zmieniając nazwę obszaru "Wiadomości" na "Strona główna/Wiadomości" zamiast po prostu "Wiadomości", można znaleźć właściwe widoki. W głównym pliku Global.asax.cs tworzę instancje wszystkich obszarów ("Home" i "News") i rejestruję je pojedynczo, ponieważ funkcja RegisterAllAreas() odnajduje tylko obszary o jeden poziom głęboki (tzn. Wyszukuje i rejestruje tylko "Home" " powierzchnia).Czy zagnieżdżone obszary są możliwe w ASP.NET MVC 2?

Czy ktoś próbował czegoś podobnego? Czy to jest poważny hack, czy może to stabilne długoterminowe rozwiązanie? Każda rada, jaką możesz zaoferować, jest bardzo doceniana.

+0

Jedną z zalet ASP.NET MVC jest prostszy i czytelny dla człowieka adres URL. Im więcej zagnieżdzisz obszarów, tym dłużej będą adresy URL, a im mniej przyjazne. Czy naprawdę potrzebujesz zagnieżdżania? Tylko myśl (i przepraszam, nie znam odpowiedzi na twoje pytanie). –

Odpowiedz

1

Wierzę, że tworzenie czegoś takiego ze sterownikami nie będzie stanowić problemu, ponieważ zostaną znalezione przy użyciu przestrzeni nazw.

Problem dotyczy widoków.

Domyślnie routing MVC (za pośrednictwem ViewEngine) wykorzystuje tylko wartości Area, Controller i View w kolekcji RouteData.

Jest to zaimplementowane w VirtualPathProviderViewEngine w wirtualnych metodach FindView (i przy użyciu nie wirtualnego GetPath). Będziesz musiał zastąpić metody FindView w swoim ViewEngine.

To nie jest bardzo duże lub skomplikowane ilość kodu, ale najlepiej przeżywa źródła i węszyć, ponieważ istnieją pewne buforowanie dzieje wokół i kilka innych rzeczy ...

4

Można to zrobić z MvcCodeRouting, sepate open-source projektu CodePlex.

MvcCodeRouting automatycznie tworzy najlepsze możliwe trasy dla aplikacji ASP.NET MVC.

  1. Uporządkuj swoje kontrolery Korzystanie z przestrzeni nazw (nie więcej obszarów) że może iść tak głęboko, jak chcesz.
  2. Domyślne ograniczenia dla typów pierwotnych, które można przesłonić dla poszczególnych parametrów lub dla poszczególnych lokacji.
  3. Inteligentne grupowanie podobnych tras w celu efektywnego dopasowywania.
  4. Obsługa kontrolera root.
  5. Wykrywanie niejednoznacznych tras.
  6. Formatowanie tras (np. Zamień je małymi literami).
  7. Renderuj trasy jako połączenia z metodą rozszerzenia MapRoute, do debugowania.
  8. Skorzystaj z tej samej trasy bazowej na podstawie nazw w celu uporządkowania swoich widoków.
+0

+1 za pomocne łącze, ale w ogólności odpowiedzi, które są tylko linki do innej strony są znacznie lepsze, gdy mają jakiś dodatkowy tekst objaśniający lub co najmniej dobry odpowiedni cytat z linku. Dodałem cytat i podkreśliłem odpowiednią część, która faktycznie odpowiada na pytanie. –

+0

@Samuel Neff: Dzięki za edycję, odpowiedziałem w pośpiechu. –