1. 程式人生 > >ASP.NET MVC 之View相關

ASP.NET MVC 之View相關

VS2015 新建一個MVC工程,驗證改成No Authentication 介面大致如下

得到一個解決方案如下

下面分析一下View:

@{

 ViewBag.Title = "ViewPageOne";

 Layout = "~/Views/Shared/_Layout.cshtml";

}

使用模板頁的頁面,會自動在頁面中生成程式碼。來指定模板頁,使用Layout來指定具體的模板頁。如果內容頁中沒有Layout屬性,則使用的是預設的模板頁。如果Layout指定為null,則表示不使用模板頁。

可以在Shared資料夾右鍵建立分部檢視作為模板,檢視頁將Layout = "~/Views/Shared/_Layout.cshtml"修改為自己定義的檢視即可Layout = "~/Views/Shared/_XXX.cshtml";

介紹一下檢視中使用

在檢視檔案中使用Scripts.Render()輸出指令碼包,Styles.Render()輸出樣式包,使用前需要在配置BundleConfig.cs檔案,這裡都是系統預設的,這麼寫的好處和作用先不闡述了,同<script>方法一樣,可以寫在<Head>和<Body>裡。

html檔案是自上而下的執行方式,但引入的css和javascript的順序有所不同,css引入執行載入時,程式仍然往下執行,而執行到<script>指令碼是則中斷執行緒,待該script指令碼執行結束之後程式才繼續往下執行。所以,一般將script放在body之後是因為避免長時間執行script指令碼而延遲阻塞。而有一些頁面的效果的實現,是需要預先動態的載入一些js指令碼,所以這些指令碼應該放在<body>之前。其次,不能將需要訪問dom元素的js放在body之前,因為此時還沒有開始生成dom,所以在body之前的訪問dom元素的js會出錯,或者無效。

@RenderBody()
    @RenderBody()在模板頁中使用表示內容頁在模板中的位置。當建立具有模板頁的內容頁的時候,內容頁就呈現在模板頁中@RenderBody()所在的位置,一個模板頁中只能有一個@RenderBody()。

@RenderSection
  @RenderSection用於在模板佈局中定義一個區域,在內容頁可以定義一些內容來填充這個區域,例如內容頁中引用的JS檔案,可以填充到模板頁的section位置。每個內容頁的單獨一些資訊,可以在模板頁中這個區域顯示。
  @RenderSection有兩個引數,第一個引數用於定義section的名稱,第2個引數是布林型別,如果為TRUE,表示內容頁必須定義這個section,如果為false,則表示內容頁可定義section,也可以不定義。

按照上面模板頁的寫法,內容頁加上

@section scripts
{
    我是主頁
}

就可以了。

@RenderPage
  @RenderPage用於表示在一個頁面中呈現另一個頁面的內容.引數指定要呈現的網頁的位置。
  我們在Shared資料夾下面新建一個View.cshtml檔案,然後裡面寫上版權資訊,然後在模板頁中開闢一塊位置用來呈現footer頁面。

<!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">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; @DateTime.Now.Year - 我的 ASP.NET 應用程式</p>
        </footer>
    </div>
    <footer>
        @RenderPage("~/Views/Shared/View.cshtml")
    </footer>

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

執行如下: