2011-12-20 12 views
32

Mój problem polega na tym, że nie mogę użyć @RenderSection z szablonu zagnieżdżonego, gdy @RenderSection jest zdefiniowany w szablonie podstawowym. Obecnie mam zagnieżdżony szablon podstawowy, który jest powiązany z szablonem podrzędnym, który jest następnie używany na stronach widoków. Po zdefiniowaniu @RenderSection w szablonie podstawowym i renderowaniu go na stronach widoków powoduje błąd.@RenderSection w szablonach zagnieżdżonych

Oto dokładny problem.

Chcę utworzyć RenderSection, aby umożliwić mi wstawianie niestandardowych skryptów. Mój szablon podstawa ....

<!DOCTYPE html> 
<html> 
<head> 
<title>@ViewBag.Title</title> 
@RenderSection("HeaderContent", false) // The region of the header scripts (custom css) 

</head> 
<body> 
@RenderBody() 
</body> 
</html> 

I wtedy pominąć szablon dziecko jak nie chcesz umieścić dowolny kod niestandardowy głowy tam i zastosować go do samej strony ..

@section HeaderContent { 
    <script>alert("hi");</script> 
} 

Moim problemem jest to, że nie mogę dodawać niestandardowego kodu głowy do podstawowego szablonu z moich normalnych stron.

Następujące sekcje zostały zdefiniowane, ale nie zostały wyrenderowane dla strony układu ~/Views/Shared/OneColLayer.cshtml": "HeaderContent.

Czy muszę wstawić wskaźnik do szablonu bazowego na stronie widoku?

@{ 
    Layout = "~/Views/Shared/BaseTemplate.cshtml"; 
} 

Mój nowy szablon bazowy

<head> 
    <link rel="stylesheet" type="text/css" href="@Url.Content("~/content/layout.css")" /> 
    <link rel="stylesheet" type="text/css" href="@Url.Content("~/content/global.css")" /> 
    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")"></script> 
    <script type="text/javascript" src="@Url.Content("~/js/fadeInFadeOut.js")"></script> 
    <title>@ViewBag.Title</title> 
    @RenderSection("HeaderContent", false) 
</head> 
<body> 
    @RenderBody() 
</body> 

mój nowy szablon dziecko

@{ 
    Layout = "~/Views/Shared/BaseTemplate.cshtml"; 
} 
@RenderSection("HeaderContent", false) 
@RenderBody() 

mój widok

@{ 
    ViewBag.Title = "Home"; 
    Layout = "~/Views/Shared/OneColLayer.cshtml"; 
} 
@section HeaderContent { 
    <h1>Left Content</h1> 
} 
<div>my view content</div> 

zawartość zostanie umieszczona w oneCol szablonu teraz szablon bazowy .

wyników ...

<div id="Content"> 
    <h1>Left Content</h1> 
</div> 

Odpowiedz

50

musisz określić sekcje, które są przepuszczane przez w środku szablonu.

BaseTemplate.cshtml

<!DOCTYPE html> 
<html> 
    <head> 
    <title>@ViewBag.Title</title> 
    @RenderSection("HeaderContent", false) @* The region of the header scripts (custom css) *@ 
    </head> 
<body> 
    @RenderBody() 
</body> 
</html> 

EDIT

Twój nowy szablon dziecko

@{ 
    Layout = "~/Views/Shared/BaseTemplate.cshtml"; 
} 
@section HeaderContent { 
    @RenderSection("HeaderContent", false) 
} 
@RenderBody() 

Jeśli umieścisz sekcję renderowania wewnątrz sekcji z szablonu bazowego, będzie renderować tę sekcję we właściwym miejscu na szablon podstawowy.


View.cshtml -> używa MiddleLayout.cshtml jak to układ

@section HeaderContent 
{ 
    <!-- header content that will now render --> 
} 

<!-- page content --> 
+0

Próbowałem robić tej metody. Ale treść w moim widoku zostanie wyświetlona w szablonie, który nie dziedziczy po szablonie podstawowym. –

+0

@JamesAndrewSmith za twoje zmiany, pojawia się na twoim środkowym szablonie, ponieważ nie umieszczasz '@ RenderSection' w środkowym szablonie wewnątrz renderowanej sekcji. Będę edytować moje, aby pokazać dokładnie, jak twój powinien wyglądać. –

+0

Dobrze mi działało – Jacques

Powiązane problemy