W przypadku aplikacji ASP.NET MVC widziałem ten artykuł na blogu . Autor ScottGu dodaje @section
plik Index.cshtml.
Mam kilka pytań (w odniesieniu do powyższego artykułu):
- Czy plik Index.cshtml jest udostępnionym widokiem?
- Przykładowy kod używa
@section
kodu w określonym widoku. Czemu?
Czy ktoś może wyjaśnić, dlaczego i kiedy powinienem używać @section
w widoku?
asp.net-mvc
Bogus
źródło
źródło
Odpowiedzi:
@section
służy do definiowania treści, które są zastępowane z widoku współdzielonego. Zasadniczo jest to sposób na dostosowanie udostępnionego widoku (podobnie do strony wzorcowej w formularzach sieci Web).Może się okazać, że artykuł Scotta Gu na ten temat jest bardzo interesujący .
Edycja: na podstawie dodatkowego wyjaśnienia pytania
@RenderSection
Składnia idzie do podzieliła pogląd, takich jak:<div id="sidebar"> @RenderSection("Sidebar", required: false) </div>
Zostanie to następnie umieszczone w Twoim widoku za pomocą
@Section
składni:@section Sidebar{ <!-- Content Here --> }
W MVC3 + możesz albo bezpośrednio zdefiniować plik układu, który ma być używany dla widoku, albo możesz mieć domyślny widok dla wszystkich widoków.
Typowe ustawienia widoku można ustawić w _ViewStart.cshtml, który definiuje domyślny widok układu podobny do tego:
@{ Layout = "~/Views/Shared/_Layout.cshtml"; }
Możesz również ustawić widok udostępniony, aby był używany bezpośrednio w pliku, na przykład index.cshtml bezpośrednio, jak pokazano w tym fragmencie.
@{ ViewBag.Title = "Corporate Homepage"; ViewBag.BodyID = "page-home"; Layout = "~/Views/Shared/_Layout2.cshtml"; }
Istnieje wiele sposobów dostosowania tego ustawienia za pomocą kilku innych wymienionych w tej odpowiedzi SO .
źródło
Dobrym przykładem jest Javascript. Chcesz, aby znajdował się u dołu strony wyświetlanej w przeglądarce, ponieważ jest to sprawdzona metoda.
Jak byś to zrobił z widoku opartego na układzie / stronie głównej, gdzie masz dostęp tylko do środka strony?
Robisz to, deklarując sekcję Skrypty na dole strony Układ. Następnie możesz dodać zawartość, w tym przypadku Javascript (mam nadzieję!), Ze strony widoku na dół strony układu.
źródło
Chcesz używać sekcji, gdy chcesz, aby fragment kodu / treści był renderowany w symbolu zastępczym, który został zdefiniowany na stronie układu.
W konkretnym przykładzie, który utworzyłeś, zdefiniował on RenderSection w pliku _Layout.cshtml. Każdy widok, który używa tego układu, może zdefiniować sekcję @ o tej samej nazwie, jak zdefiniowano w układzie, i zastąpi wywołanie RenderSection w układzie.
Być może zastanawiasz się, skąd wiemy, że Index.cshtml używa tego układu? Wynika to z trochę konwencji MVC / Razor. Jeśli spojrzysz na okno dialogowe, w którym dodaje widok, pole „Użyj układu lub strony wzorcowej” jest zaznaczone, a tuż poniżej jest napisane „Pozostaw puste, jeśli jest ustawione w pliku Razor _viewstart”. Nie jest wyświetlany, ale wewnątrz tego pliku _ViewStart.cshtml znajduje się kod podobny do:
@{ Layout = "~/Views/Shared/_Layout.cshtml"; }
Sposób działania ViewStart jest taki, że każdy plik cshtml w tym samym katalogu lub katalogach podrzędnych będzie uruchamiał ViewStart przed jego uruchomieniem.
To właśnie mówi nam, że Index.cshtml używa Shared / _Layout.cshtml.
źródło
Pozwala zdefiniować
@Section
kod w szablonie, który można następnie dołączyć do innych plików. Na przykład do paska bocznego zdefiniowanego w szablonie można się odwoływać w innym dołączonym widoku.//This could be used to render a @Section defined as @Section SideBar { ... @RenderSection("SideBar", required: false);
Mam nadzieję że to pomoże.
źródło