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>© @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>
執行如下: