愛(ai)上MVC3~布局頁的繼(ji)承與擴展
在(zai)MVC3中引(yin)入(ru)了Razor引(yin)擎,這對(dui)于(yu)代碼的(de)(de)(de)表現力上(shang)(shang)是(shi)個(ge)突(tu)破,同時母板頁(ye)(ye)也變成了_Layout,所以(yi),我們就習慣上(shang)(shang)稱它為布(bu)(bu)(bu)(bu)(bu)局(ju)頁(ye)(ye)面(mian)(mian),在(zai)razor里(li),布(bu)(bu)(bu)(bu)(bu)局(ju)頁(ye)(ye)面(mian)(mian)是(shi)可(ke)以(yi)繼(ji)承(cheng)的(de)(de)(de),即,一個(ge)上(shang)(shang)下公用(yong)的(de)(de)(de)布(bu)(bu)(bu)(bu)(bu)局(ju)頁(ye)(ye)面(mian)(mian)(不用(yong)登陸的(de)(de)(de),產品展示頁(ye)(ye)等),可(ke)以(yi)被上(shang)(shang)下左右公用(yong)的(de)(de)(de)布(bu)(bu)(bu)(bu)(bu)局(ju)頁(ye)(ye)面(mian)(mian)(需要登陸后(hou)看到的(de)(de)(de),如用(yong)戶中心)繼(ji)承(cheng)。當然繼(ji)承(cheng)之(zhi)后(hou),父(fu)布(bu)(bu)(bu)(bu)(bu)局(ju)頁(ye)(ye)里(li)的(de)(de)(de)一切,在(zai)子布(bu)(bu)(bu)(bu)(bu)局(ju)頁(ye)(ye)里(li)都(dou)是(shi)可(ke)見的(de)(de)(de),這對(dui)于(yu)使用(yong)面(mian)(mian)向對(dui)象(xiang)的(de)(de)(de)開發者來說(shuo),非常容易接(jie)受(shou)。
我們來看一下圖示:
這是主布局頁:

這是(shi)子布(bu)局頁,它繼承了主布(bu)局頁面的(de)內容:

總結:布局(ju)頁可以通過layout去繼承另(ling)一個布局(ju)頁的內容。
下面(mian)再來看一(yi)下布(bu)局(ju)頁的擴展(zhan),事實上是對布(bu)局(ju)頁上元素(su)的擴展(zhan),我們以section元素(su)為例(li),來說(shuo)明一(yi)下。
主布局代碼:
<head>
<title>@ViewBag.Title</title>
@RenderSection("Meta",false)
<script src="../../Scripts/JS/jquery.js"></script>
<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
@RenderSection("Head", false)<!-- 主母板頁中的JS片斷 -->
</head>
子布局(ju),用戶中心代碼:
@section Meta{ @RenderSection("Meta", false) <!-- 繼承主母板的Meta,并擴展自己的Meta節點--> } @section Head{ <link href="../../Scripts/JQTree/themes/default/style.css" rel="stylesheet" type="text/css" /> <link href="../../Content/model.css" rel="stylesheet" /> <script src="../../Scripts/JQTree/jquery.jstree.js"></script> <script src="../../Scripts/My97DatePicker4.7/WdatePicker.js" type="text/javascript"></script> <script src="../../Scripts/xheditor/xheditor-zh-cn.min.js" type="text/javascript"></script> @RenderSection("Head", false) }
而真正的頁面,也可以有自己的邏輯,去實現Meta和(he)Head塊,Meta塊用來放(fang)置(zhi)SEO信息(xi),而Head塊來放(fang)置(zhi)CSS和(he)JS代碼。
@section Meta{ <meta name="keywords" content="權限管(guan)理 后臺管(guan)理系統" /> <meta name="description" content="權限管理 后臺管理系統" /> @section Head{ <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> }
總結:布(bu)(bu)局(ju)(ju)頁(ye)的(de)(de)一切元素(su)還可以進(jin)行擴(kuo)展(zhan),即在主布(bu)(bu)局(ju)(ju)頁(ye)定義(yi)了元素(su),在子布(bu)(bu)局(ju)(ju)頁(ye)還可以重新(xin)定義(yi)它,而在真的(de)(de)頁(ye)面(mian),看到(dao)的(de)(de)就(jiu)是兩個布(bu)(bu)局(ju)(ju)頁(ye)的(de)(de)內容,這就(jiu)是布(bu)(bu)局(ju)(ju)頁(ye)的(de)(de)擴(kuo)展(zhan)。