Google Code Prettify

[MVC] Razor @RenderSection

RenderSection 主要的用途是在主版面 _layout.cshtm 中定義一些區塊。



像是以下這段

    <div id="body">
        <div class="container">
            @RenderSection("featured", required: false)
            <section class="content-wrapper clear-fix">
                @RenderBody()
            </section>
        </div>
    </div>
    <footer>
        @Html.Partial("Footer")
    </footer>
    @RenderSection("scripts", required: false)

微軟預設主版面的程式碼



@RenderBody() 是會產生其他view的畫面

@RenderSection("featured", required: false)  這個就是主版面預留的section

此方法的第二個參數  就是設定這個section是不是每個頁面都一定要實作

設定false 就是不用每個頁面都實作

true的時候 就每個頁面一定都要有這個區塊

不然會出現exception

要在每個頁面設定值的方法如下

@section featured {
    <div class="jumbotron">
        <h1>@ViewBag.CategoryName.</h1>
        <p>@ViewBag.Message</p>
    </div>
}

這樣就會在主版頁面featured區塊顯示這段HTML

同理 要使用@RenderSection("scripts", required: false)這塊

就這樣設定

@section scripts {
   <script>
         $(document).ready(function () {
            initForm();
        });
   </script>
}


此時如果對版面比較要求的人就會延伸出一個問題,我如果有頁面不想設定此區塊,能不能給他預設值,因為我懶得每一頁都設定預設值

此時可以使用IsSectionDefined來判斷頁面有沒有設定section

    @if (IsSectionDefined("featured"))
    {
        @RenderSection("featured", required: false)
    }
    else
    {
        <p>Section not define.</p>
    }