主版頁面與 RenderSection

 

一、主版頁面

一個MVC專案啟始會執行_ViewStart.cshtml,

而_ViewStart.cshtml會去指定使用哪個主版頁面,

預設內容如下,代表會去讀_Layout.cshtml這個主版頁面。

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

你也可以先做出多個主版頁面,然後再決定要套用哪一個

 

 

 

二、如果你想要在主版頁面的框架下能客製化單一page的主版內容則可以使用RenderSection


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - 我的 ASP.NET 應用程式</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                @Html.ActionLink("應用程式名稱", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li>@Html.ActionLink("首頁", "Index", "Home")</li>
                    <li>@Html.ActionLink("關於", "About", "Home")</li>
                    <li>@Html.ActionLink("連絡方式", "Contact", "Home")</li>
                </ul>
            </div>
        </div>
    </div>
    <div class="container body-content">
        @RenderSection("featured", required: false)
        @RenderBody()
        <hr />
        <footer>
            <p>© @DateTime.Now.Year - 我的 ASP.NET 應用程式</p>
        </footer>
    </div>

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

 

RenderSection:

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

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

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

不然會出現exception

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

@section featured {

    <p>

我是featured

    </p>

}

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

 

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

就這樣設定

@section scripts {

   <script>

         $(document).ready(function () {

            initForm();

        });

   </script>

}

 

資料來源:

[MVC] Razor @RenderSection 使用心得