Wymuś, aby wszystkie obszary używały tego samego układu
Mam następującą strukturę projektu:
-
/Views / Shared/_Layout;
-
/Area / Area1/Views/ControllerName / Index;
...
- / Areas / AreaN/Views/ControllerName / Index.
Czy Jest jakiś sposób, aby zmusić wszystkie obszary do użycia _Layout jako układ podstawowy?
Czy można to zrobić bez dodawania pliku _ViewStart (na przykład poprzez routing konfiguracja)?
Zobacz Też:
Jak określić różne układy w ASP.NET plik MVC 3 razor viewstart?
3 answers
Wystarczy dodać plik o nazwie:
_ViewStart.cshtml
W folderze widoków każdego obszaru:
/Areas/Area1/Views/_ViewStart.cshtml
I edytować plik, aby wskazać układ główny w następujący sposób:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Aby to zadziałało, nie musisz określać wartości we właściwości layout widoku, jeśli to zrobisz, nadpiszesz układ globalny
Uwaga: jak wspomniał Tony, możesz edytować właściwości układu każdego widoku, aby wskazać układ główny, jednak nie jest to zalecany sposób na to ponieważ łączyłbyś swoje poglądy ze swoim układem i zmieniał, byłoby to bolesne
Edycja 1
Jeśli chcesz użyć kodu do ustawienia domyślnego układu widoku, być może powinieneś rozważyć napisanie niestandardowego silnika widoku.
Spróbuj wyszukać w Google o custom RazorViewEngine
i RazorView
Ten artykuł może być dobrym punktem wyjścia
Http://weblogs.asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.aspx
Nie zrobiłem coś w tym stylu, ale mam nadzieję, że wskazuję ci właściwy kierunek
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-07 20:51:52
Rozszerzanie odpowiedzi przez Jupaol....
Przynajmniej w VS2013, _ViewStart.plik cshtml jest dodawany domyślnie podczas tworzenia obszaru, więc już tam jest i możesz zmienić zawartość, jak zauważa, aby wskazywać na główny _Layout.cshtml. Następnie można usunąć _Layout.cshtml w obszarze, ponieważ nie jest już używany (i potencjalne źródło zamieszania teraz)
Jednakże, poprzez routing wykonywany w tym root _Layout.cshtml będzie musiał rozważyć obszary.
Na default _Layout.cshtml ma wiele pomocników ActionLink, które wymagają niewielkiej modyfikacji:
Dodaj RouteValueDictionary param do wszystkich wywołań ActionLink, ustawiając Area="". Zauważ, że pusty łańcuch odnosi się do poziomu głównego. Pozwoli to na poprawne działanie tych łączy, gdy są wywoływane z obszaru, a nadal działają, gdy są wywoływane z katalogu głównego.
Np.:
<li>@Html.ActionLink("Home", "Index", "Home", new { Area = "" }, null)</li>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-08 18:12:08
Określasz układ używając:
@{ Layout = " _Layout"; }
Jeśli chcesz to łatwiej zmienić na raz. Być może możesz po prostu ustawić go jako zmienną worka widoku i przekazać go na kontrolerze. Aby było to jeszcze łatwiejsze, możesz utworzyć kontroler bazowy, który odziedziczą inne kontrolery i przypisać układ do worka widoków.
Nie wiem, dlaczego routing musiałby się zmienić, a może nie rozumiem. Mam nadzieję, że to pomoże:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-07 20:00:37