2011-09-29 10 views
13

Mam _Layout.cshtml najwyższego poziomu, który wygląda mniej więcej tak: "sub-layouts"W MVC Razor, jak zrobić RenderSection zdefiniowany poniżej pod-layout?

<html> 
<head> 
    @RenderSection("Header", required: false) 
</head> 
<body> 

    @RenderSection("LeftPane", required: false) 
    @RenderSection("RightPane", required: false) 
    @RenderBody() 

</body> 
</html> 

to mam dwa Jedna definiuje tylko sekcję LeftPane, druga definiuje zarówno LeftPane, jak i RightPane. Te pod-layouty są nazywane _LeftPane.cshtml i _LeftPlusRightPane.cshtml i mają układ Layout na "_Layout.cshtml."

Następnie w każdym pliku View .cshtml ustawiam układ na _LeftPane.cshtml lub _LeftPlusRightPane.cshtml, w zależności od tego, co chcę pokazać na stronie.

Wszystko działa dobrze. Problem dotyczy nowej sekcji "Nagłówek" dodanej w części dokumentu dotyczącej dokumentu <head>. Ta sekcja nie jest zdefiniowana w pod-układach, lecz w rzeczywistych widokach. Kiedy próbuję coś zobaczyć w ten sposób, pojawia się błąd:

Następujące sekcje zostały zdefiniowane, ale nie zostały wyrenderowane na stronie układu "~/Views/Shared/_LeftPlusRightPane.cshtml": "Header".

Nie chcę renderować sekcji Nagłówek w sublayouts, chcę renderować go w pliku _Layout.cshtml. Jak mogę "przejść przez" zdefiniowaną sekcję Nagłówek z widoku niskiego poziomu, poprzez pod-układy, aż do najwyższego _Layout?

+0

Czy możesz wkleić, jak wyglądają twoje sekcje? Myślę, że po prostu nie owijacie sekcji w poszczególne widoki. – Fourth

+0

Jedyną sekcją, z którą mam problem jest nowa sekcja Nagłówek. Przykład jednego z moich widoków: @section Header { } –

Odpowiedz

25

Można zagnieździć układy. Więc _Layout2 ma Layout = "_Layout.cshtml";

Możesz również użyć plików _ViewStart w każdym z podfolderów Zobacz, aby określić inny domyślny układ dla tego podfolderu.

Aby „pass through” sekcji, po prostu zrobić coś takiego:

@section Header {@RenderSection("Header", false)} 

który pozwala przekazać treść w górę łańcucha.

+0

Dzięki, to jest dokładnie to, czym byłem próbować zrobić! –

+0

Świetnie, właśnie tego szukałem, wielkie dzięki! – vtortola

+0

Dzięki, bardzo mi to pomaga – MNR

Powiązane problemy