上篇對於利用IoC框架對視圖的實現進行依賴注入,最後還簡單的介紹一下自定義的視圖輔助器是怎麼定義和使用的,對於Razor語法的細節和輔助器的使用下篇會說講到,本篇來說解一下視圖中的分段概念、和分部視圖的使用。javascript
分段的使用css
在ASP.NET MVC框架的Razor引擎中有着分段的概念,分段什麼意思呢?分段的意思就是把視圖分紅幾個自定義的分段,而且交由佈局來控制分段的顯示。說是這麼說,咱們仍是來看一看代碼的定義,首先是使用了分段的視圖代碼的定義,示例代碼1-1.html
代碼1-1java
@{ ViewBag.Title = "ViewPartCase"; } <h2>ViewPartCase</h2> @section PartOne { <h1>這是使用分段的示例:分段一</h1> } @section PartTwo { <h1>這是使用分段的示例:分段二</h1> } @section PartThree { <h1>這是使用分段的示例:分段三</h1> }
在代碼1-1中,使用@section標間來建立分段,然後面緊跟着的就是自定義分段的名稱,這個時候佈局的代碼如示例代碼1-2.jquery
代碼1-2框架
<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> </head> <body> @RenderBody() </body> </html>
這個時候的運行結果如圖1。ide
圖1佈局
很明顯的看到圖1中所提示的錯誤信息,在佈局中並未定義PartOne、PartTow、PartThree。spa
這樣咱們只能修改代碼1-2,修改佈局中的定義,修改後的示例代碼1-3.code
代碼1-3
<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> </head> @RenderSection("PartOne") @RenderSection("PartThree") <body> @RenderBody() </body> @RenderSection("PartTwo") </html>
在代碼1-3中@RenderSection標籤用於顯示指定的分段,參數爲自定義的分段名稱,這裏你們要清楚一個概念,就是佈局的定義是來引導視圖分段的定義,只不過在本篇幅是爲了讓你們清楚的理解因此顛倒了順序,實際運用中應該是先定義好佈局中所要使用的分段,以及指示的分段名稱,而後在視圖的定義中若是要使用當前的佈局則會根據當前佈局中的指定的分段名稱來定義內容。看下以上代碼運行結果如圖2.
圖2
好比說如今我是先定義好的代碼1-3,而後要我定義我要呈現的頁面也就是咱們的視圖,像代碼1-1那樣定義就是正常的應用順序,那我如今修改代碼1-1,由於我不想個人視圖中使用分段,示例代碼1-4
代碼1-4
@{ ViewBag.Title = "ViewPartCase"; } <h2>ViewPartCase</h2>
正如你們所看到的,代碼1-4也就是我修改後的視圖,就是顯示一個標題,不想有其餘的東西,再次運行結果如圖2.
圖3
圖3中明確的指示出了視圖中並未定義名爲PartOne的分段,因此纔會致使這樣的錯誤,就算定義了PartOne,到了PartThree還要定義,否則接着報錯,這就是強制約束了,這樣多不人道主義阿對吧。
面對這樣的狀況,咱們有兩種方式來處理這種狀況,
第一種,使用IsSectionDefinde()方法,方法參數即爲分段名稱,以此判斷視圖中是否認義了此名稱的分段,若是定義了則會返回true,不然返回false(下面代碼會給出示例)。
第二種,使用@RenderSection()方法的重載版本,講第二個參數設置爲false,若是視圖中包含了方法參數所指定的分段則會顯示,沒有則不會報出異常。
如今咱們來看一下,修改佈局代碼1-3中的代碼以此演示上面說到的兩種狀況,示例代碼1-5.
代碼1-5
<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> </head> @if (IsSectionDefined("PartOne")) { @RenderSection("PartOne") } @RenderSection("PartThree",false) <body> @RenderBody() </body> @RenderSection("PartTwo",false) </html>
這個時候咱們再來看一下結果圖4,,
圖4
分部視圖的使用
對於分部視圖的使用其實也就是跟視圖同樣的,可是分佈視圖跟視圖的區別在於分部視圖是禁用佈局的,也就是說上面小節所說的分段在分部視圖中使用是毫無心義的,下面咱們就來看一下分部視圖的定義
圖5
圖5中並無建立強類型的分部視圖,這樣作的意義不大,在點擊「添加」按鈕後,所呈現的代碼頁面是個空的頁面什麼都沒有,這裏主要是給你們看一下分部視圖在編譯後類型所呈現的樣子也就是跟普通的視圖沒什麼區別,示例代碼1-6.
代碼1-6
public class _Page_Views_iocdemo_CustomPartialView_cshtml : System.Web.Mvc.WebViewPage<dynamic> { #line hidden public _Page_Views_iocdemo_CustomPartialView_cshtml() { } protected ASP.global_asax ApplicationInstance { get { return ((ASP.global_asax)(Context.ApplicationInstance)); } } public override void Execute() { WriteLiteral("<h1>PartialView</h1>"); } }
代碼1-6所呈現的就如同在ASP.NET MVC 視圖(二)中最後所示的示例那般,核心的地方是不會變的,咱們仍是來刪除掉這個分部視圖,從新添加一個一樣命名的強類型視圖,或者直接使用@model標籤來引用一個類型做爲視圖的Model類型,示例代碼1-7.
代碼1-7
@model MvcApplication.Models.CustomerInfo <h1>@Model.ID</h1> <h2>@Model.Name</h2> 咱們再看一下對於分部視圖使用的視圖的代碼定義,示例代碼1-8 代碼1-8 @model IEnumerable<MvcApplication.Models.CustomerInfo> @{ ViewBag.Title = "ViewPartCase"; } <h2> ViewPartCase</h2> @foreach (var model in Model) { @Html.Partial("CustomPartialView",model) }
最後的呈現的界面如圖6.
圖6
做者:金源
出處:http://www.cnblogs.com/jin-yuan/
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面