MVC 模板頁和布局

2022-03-31 13:27:46 字數 2652 閱讀 4879

我們在以前的asp.net課程中已經學習過母版頁了,在mvc中webform檢視使用母版頁的方法與以前基本相同。

建立乙個專案mvcmasterpagedemo。 新增home控制器,生成index檢視。 在生成檢視的選框中,我們選擇aspx檢視引擎,然後可以看到有「使用布局或母版頁」的選項,給我們指向乙個字尾為master的檔案(並不存在,所以無法完成檢視新增)。 現在我們自己去建立它。

找到對應的目錄,新增乙個母版頁

我們將母版頁的內容部分按檢視選項卡下的名稱來命名,這樣就能在生成的檢視中,將頁面內容預設關聯到母版頁的內容部分。

razor 布局

還是通過index生成檢視,但這次我們選擇razor檢視引擎,繼續選擇使用「布局與母版頁」,按照提示上來說,布局頁的文字框,可以留空。它預設引用的_layout.cshtml頁面的布局。

_viewstart.cshtml檔案裡已經對頁面進行了配置,所有的razor引擎頁面在執行之前,都會來執行這個viewstart頁面,layout關鍵字就是用來指向預設頁面布局的**。

預設布局

我們可以看到生成的檢視比之前的aspx頁面要乾淨許多。在檢視中與_layout.cshtml中分別新增一些文本來完成razor布局頁的測

自定義布局頁

我們還可以在檢視頁面頭部自定義需要的布局頁,同樣用layout來宣告,這樣可以覆蓋預設的layout布局頁面。

觀察發現,我們在子檢視頁面中編寫的內容,都是出現在布局頁@renderbody定義的位置。 @renderbody當建立基於此布局頁面的檢視時,檢視的內容會和布局頁面合併,而新建立檢視的內容會通過布局頁面的@renderbody()方法呈現在標籤之間。

布局頁中

@rendersection布局頁面還有節(section)的概念,也就是說,如果某個檢視模板中定義了乙個節,那麼可以把它單獨呈現出來。 @rendersection(「mysection」)

檢視頁中

當然還要在檢視中定義節,否則會出現異常:@section mysection

注意:為了防止因缺少節而出現異常,可以給@rendersection() 第2個引數設定為flase

*壓縮器*

@styles.render("~/content/css")

@scripts.render("~/bundles/modernizr")

這兩句**是將「樣式表」與「指令碼庫」 通過壓縮器封裝,並在頁面上呼叫。

在 mvc 中,bundle 物件可以用來將 js 和 css 進行壓縮(多個檔案可以打包成乙個檔案)。 並且可以區分除錯和非除錯,在除錯時不進行壓縮,以原始方式顯示出來,以方便查詢問題。

其中的bundles.add是在向**的bundletable中新增bundle項,這裡主要有scriptbundle和 stylebundle,分別用來壓縮指令碼和樣式表。

bundles.add(new stylebundle("虛擬路徑").include("真實路徑1",「真實路徑2」)

自己建立變壓器:

在專案的 content 資料夾下的 themes 資料夾建立乙個自己的資料夾,命名為 mycss,並在其中新建裡三個樣式表檔案分別是 a.css、b.css 和 c.css。

然後我們來到 bundleconfig 中的 registerbundles 函式中,將預設**全部刪除或者注釋掉,編寫自己的壓縮樣式表。 由於global.asax中本身就有乙個壓縮器註冊,所以我們寫完**編譯後就可以直接使用了。(指令碼壓縮同理)

我把這三個樣式表壓縮到了乙個不存在的路徑~/bundle/mycss 中。 新建乙個控制器和檢視,在檢視中通過@styles.render(「 ~/bundle/mycss 」)來引用樣式。  

壓縮器的安全特性 

可以看到三條樣式表引用全部顯示在頁面上。還差一步,bundle 物件在除錯時候是不執行壓縮的,所以我們得需要將web.config配置檔案中 的 debug 改為 false,讓 web應用程式在非除錯環境下執行。

MVC模板頁中顯示資料

新建乙個模板頁的類,讓它繼承於controler類,在建構函式中寫上viewdata masterpagedata 返回資料。然後在每個用到模板頁的controlers中都繼承這個類即可。詳見 public class masterpagedata controller 模板頁的類 public c...

MVC系列學習 七 模板頁

1.新建乙個mvc專案,選擇基本 2.檢視檔案 看到vs為我們生成了一些東西 布局頁面,layout 指定了模板頁 3.開始例項 首先控制器中的 如下 檢視中 如下 1.在 views viewstart.cshtml 如果 views下有中有該 子檢視,執行時都先載入它,且它的優先順序高與其他檢視...

MVC和模板技術

師兄的 快要完工了,回想這幾天幫他做 使用了他自己寫的乙個asp mvc 0.1版的後台,雖然還有不少不完善的地方,但是最起碼把基本的功能都使用mvc的實現了。這個框架的基本上還只有只有後台的部分,前台準備用模板技術實現。後台的設計思路是所有的後台操作都要通過不同的controller進行控制跳轉和...