2011-12-20 34 views
32

Sorunum, temel şablonda @RenderSection tanımlandığında yuvalanmış bir şablondan @RenderSection kullanamıyorum. Şu anda, görünüm sayfalarında kullanılan bir alt şablona bağlı bir yuvalanmış temel şablonum var. Temel şablonda @RenderSection'u tanımladığımda ve görüntü sayfalarında oluşturduğumda bir hata atar.@RenderSection iç içe geçmiş jilet şablonları

İşte tam olarak sorun.

Özel komut dosyaları eklememe izin vermek için bir RenderSection oluşturmak istiyorum. Orada herhangi bir özel kafa kodu koymak ve sayfanın kendisine uygulamak istemiyoruz olarak Benim baz şablon ....

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

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

Sonra çocuk şablonu atlamak ..

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

Benim sorunum, normal sayfalardan temel şablona özel başlık kodu ekleyemem.

Aşağıdaki bölümler, düzen sayfası ~/Views/Shared/OneColLayer.cshtml": "HeaderContent için tanımlanmış, ancak oluşturulmamıştır.

Görünüm sayfasında temel şablona bir işaretçi eklemem gerekir mi? içeriğin artık oneCol şablonunda baz şablon yerleştirilir alır

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

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

Benim yeni baz şablon

<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> 

benim yeni çocuk şablon

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

benim bakış .

sonuç ...

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

cevap

50

Sen bölge şablonda geçmesine izin verilen bölümleri belirtmeniz gerekir.

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> 

DÜZENLEME

yeni çocuk şablon

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

Eğer baz şablonundan bir bölümün içine işlemek bölümünü koyarsanız, o bölümü doğru yerde temel şablon.


View.cshtml - ben bu yöntemi yapıyor denedi düzen

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

<!-- page content --> 
+0

olduğu gibi> MiddleLayout.cshtml kullanır. Ancak, görünümümdeki içerik, temel şablon değil, şablonda görüntülenir. –

+0

@JamesAndrewSmith, düzenlemelerinize göre orta şablonunuzda gösterilmektedir, çünkü oluşturduğunuz bir bölümün içinde ortadaki şablona '@ RenderSection 'koymadığınız için. Seninkilerin nasıl görünmesi gerektiğini size tam olarak göstereceğim. –

+0

Benim için iyi çalıştı – Jacques

İlgili konular