Asp.net MVC]Asp.net MVC5系列——布局視圖

來源:互聯網
上載者:User

標籤:開始   調用   資料   blog   div   cti   bag   res   參數   

 目錄

系列文章

概述

布局視圖

系列文章

[Asp.net MVC]Asp.net MVC5系列——第一個項目

[Asp.net MVC]Asp.net MVC5系列——添加視圖

[Asp.net MVC]Asp.net MVC5系列——添加模型

[Asp.net MVC]Asp.net MVC5系列——從控制器訪問模型中的資料

[Asp.net MVC]Asp.net MVC5系列——添加資料

[Asp.net MVC]Asp.net MVC5系列——在模型中添加驗證規則 

[Asp.net MVC]Asp.net MVC5系列——實現編輯、刪除與明細資訊視圖

[Asp.net MVC]Asp.net MVC5系列——Razor文法

[Asp.net MVC]Asp.net MVC5系列——Routing特性 

概述

由於前段時間,項目一直吃緊,mvc的學習中斷了,周末了,心裡一直惦記這事,很早就起來了,把之前寫的文章看了一遍,以便找到再次入手的地方,想開始,就想著最近的lync項目的管理端有用到asp.net的模版MasterPage,那就順便就說說asp.net mvc 中的布局視圖吧。目前項目告一段落,個人正在將lync的群組空間,使用mvc進行改寫。

布局視圖

建立一個mvc5項目,你會在Views目錄下看到一個shared的檔案夾,其中視圖_Layout.cshtml就是布局視圖,類似於webform中的Masterpage。如所示,

建立一個內容視圖,來應用該布局視圖,,

使用布局頁後,會在視圖中產生如下代碼,每一個視圖通過使用Layout屬性指定它的布局:

@{    ViewBag.Title = "Index";    Layout = "~/Views/Shared/_Layout.cshtml";}<h2>Index</h2>

 

如果每個視圖,應用同一個布局,就會產生冗餘的代碼,並且難以維護,上面第一張圖中你也看到了有個_ViewStart.cshtml的視圖,該視圖非常簡單,只有一句代碼,指定預設的布局:

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

 

這個檔案中的代碼優先於同目錄下的任何視圖代碼的執行。這個檔案也可以遞迴地應用到子目錄下的任何視圖。

由於這個代碼優先於任何視圖的運行,所以一個視圖可以重寫Layout屬性的預設值,從而重新選擇一個不同的布局。如果一組視圖擁有共同的設定,那麼_ViewStart.cshtml檔案的好處就體現出來了,因為我們可以在它裡面對共同的視圖配置進行統一的設定。如果有視圖要覆蓋統一的的設定,我們只需要修改對應的屬性值值即可。

如果不想應用模板頁,則指定Layout屬性為null即可。

在_Layout.cshtml布局視圖中,你總可以找到類似下面的代碼:

   <div class="container body-content">        @RenderBody()   </div>

 

@RenderBody()是一個預留位置,用來標記使用這個布局的視圖將渲染它們的主要內容的位置,如果您喲webform基礎,你它的功能就類似於webform中的ContentPlaceHolder,但是跟ContentPlaceHolder還是有區別的,webform中ContentPlaceHolder根據id的不同可以有多個,但是@RenderBody()有且只能有一個。

那如果我們想在內容頁中使用引用的資源,比如css或者js怎麼辦?

在webform中我們通常是這樣做的

MasterPage中

   <asp:ContentPlaceHolder ID="head" runat="server">    </asp:ContentPlaceHolder>

 

應用該模版的webform內容頁

1 <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">2  <script type="text/javascript" src="../js/zTree/jquery-1.4.4.min.js"></script>3 4 </asp:Content>

在Asp.net mvc中是這樣處理的

@RenderSection

用於在模板布局中定義一個地區,在內容頁可以定義一些內容來填充這個地區,例如內容頁中引用的JS檔案,可以填充到模板頁的section位置。每個內容頁的單獨一些資訊,可以在模板頁中這個地區顯示。

@RenderSection有兩個參數,第一個參數用於定義section的名稱,第2個參數是布爾類型,如果為true,表示內容頁必須定義這個section,如果為false,則表示內容頁可定義section,也可以不定義。

例如在布局頁中這樣寫

<head> @RenderSection("script",false);</head>

在使用該布局的視圖中

1 @section script{2     <script type="text/javascript" src="../js/ParameterConfigJs.js"></script>3     }

 

@RenderPage

另外也可以使用 @RenderPage進行布局

用於表示在一個頁面中呈現另一個頁面的內容.參數指定要呈現的網頁的位置。

我們在Shared檔案夾下面建立一個footer.cshtml檔案,然后里面寫上著作權資訊,然後在模板頁中用來呈現footer頁面,如下:

1 <footer>2             <p>@RenderPage("~/Views/Shared/footer.cshtml")</p>3 </footer>

 

@Html.Partial()與Html.RenderPartial()

分部頁也可以達到布局的目的。

這兩個方法可以用來輸出一個分部頁,右鍵添加建立項,選擇MVC5分部頁,就可以添加一個分部頁,相當於webform中使用者控制項頁。

@Html.Partial()的參數為使用者控制項名稱,也就是分部頁名稱,傳回值為string類型,可以直接輸出。

@Html.RenderPartial()的參數也為使用者控制項名稱,傳回值為void,調用的時候直接把內容輸出到Response中。

例如:

1             @Html.Partial("_PartialDeptTree")2             @{3                 Html.RenderPartial("_PartialDeptTree");4             }

 

可以將組織圖數放在分布視圖中來用。

Asp.net MVC]Asp.net MVC5系列——布局視圖

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.