Asp.net MVC'de @RenderSection nedir


170

@RenderSection'ın amacı nedir ve nasıl çalışır? Paketlerin ne yaptığını anlıyorum, ancak bunun ne yaptığını henüz anlamadım ve muhtemelen önemli.

@RenderSection("scripts", required: false)

Belki de nasıl kullanılacağına dair küçük bir örnek?

Yanıtlar:


287

Bunun gibi bir _Layout.cshtml görünümünüz varsa

<html>
    <body>
        @RenderBody()
        @RenderSection("scripts", required: false)
    </body>
</html>

böyle bir index.cshtml içerik görünümüne sahip olabilirsiniz

@section scripts {
     <script type="text/javascript">alert('hello');</script>
}

Gerekli düzeni sayfasını kullanarak görünümü bir komut bölümü olması gerekir olmadığını belirtir


20

Eğer

(1) bunun gibi bir _Layout.cshtml görünümünüz var

<html>
    <body>
        @RenderBody()

    </body>
    <script type="text/javascript" src="~/lib/layout.js"></script>
    @RenderSection("scripts", required: false)
</html>

(2) Contacts.cshtml dosyanız var

@section Scripts{
    <script type="text/javascript" src="~/lib/contacts.js"></script>

}
<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <h2>    Contacts</h2>
    </div>
</div>

(3) About.cshtml dosyanız var

<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <h2>    Contacts</h2>
    </div>
</div>

Düzen sayfanızda, gerekirse false "@RenderSection (" komut dosyaları ", gerekli: false)" olarak ayarlanırsa, Sayfa işlendiğinde ve kullanıcı yaklaşık sayfada olduğunda, contacts.js işlenmez.

    <html>
        <body><div>About<div>             
        </body>
        <script type="text/javascript" src="~/lib/layout.js"></script>
    </html>

gerekirse true "@RenderSection (" komut dosyaları ", gerekli: true)" olarak ayarlanırsa, Sayfa görüntülendiğinde ve kullanıcı HAKKINDA sayfasında olduğunda contacts.js STILL oluşturulur.

<html>
    <body><div>About<div>             
    </body>
    <script type="text/javascript" src="~/lib/layout.js"></script>
    <script type="text/javascript" src="~/lib/contacts.js"></script>
</html>

KISA olarak, true olarak ayarlandığında , diğer sayfalarda ihtiyacınız olsun ya da olmasın, yine de işlenir. False değerine ayarlanırsa , yalnızca alt sayfa oluşturulduğunda oluşturulur.


16
bu doğru değil. Cevabınızı kendiniz denemelisiniz ve Section not defined: "scripts".Hakkında sayfanızı oluştururken gereken bayrağı ayarlarken bir not alacağınızı göreceksiniz true.
cgijbels

Sadece bir açıklama. "Komut Dosyaları" yerine "komut dosyaları" olmamalı mı?
SRIDHARAN

2

Burada Rendersection'ın tanımı MSDN

Düzen sayfalarında, adlandırılmış bir bölümün içeriğini oluşturur. MSDN

_Layout.cs sayfasına koy

@RenderSection("Bottom",false)

Burada bootom bölümünün içeriğini oluşturun ve falsebölümün gerekli olup olmadığını belirtmek için boolean özelliğini belirtir.

@section Bottom{
       This message form bottom.
}

Bu, tüm sayfalarda bölümün dibine inmek istiyorsanız, Rendersection yönteminde ikinci parametre olarak false kullanmanız gerekir.


2

Diyelim GetAllEmployees.cshtml

<h2>GetAllEmployees</h2>

<p>
    <a asp-action="Create">Create New</a>
</p>
<table class="table">
    <thead>
         // do something ...
    </thead>
    <tbody>
       // do something ...
    </tbody>
</table>

   //Added my custom scripts in the scripts sections

@section Scripts
    {
    <script src="~/js/customScripts.js"></script>
    }

Komut dosyası içermeyen başka bir görünüm "GetEmployeeDetails.cshtml"

<h2>GetEmployeeByDetails</h2>

@Model.PageTitle
<p>
    <a asp-action="Create">Create New</a>
</p>
<table class="table">
    <thead>
       // do something ... 
    </thead>
    <tbody>
       // do something ...
    </tbody>
</table>

Düzen sayfam "_layout.cshtml"

@RenderSection("Scripts", required: true)

Bu yüzden GetEmployeeDetails.cshtml dosyasına gittiğimde. GetEmployeeDetails.cshtml'de işlenecek hiçbir bölüm komut dosyası yok hatası alıyorum. Ben de bayrak değiştirirseniz @RenderSection()gelen required : trueiçin `` gerekli: FALSE. Varsa, görünümlerin bölüm komut dosyalarında tanımlanan komut dosyalarını oluşturmak anlamına gelir. Ve rafine yaklaşım _layout.cshtml

@if (IsSectionDefined("Scripts"))
    {
        @RenderSection("Scripts", required: true)
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.