.NET 2005 使用MasterPages實現Web窗體模板

使用MasterPages實現Web窗體模板

如果你是一個網頁開發人員,面對大量含有重複內容的頁面,你一定希望能利用“模板”定義網頁內的公共部分,而每一個頁面只需要完成其特有的內容,通過模板生成最終的頁面。

熟悉Dreamweaver的網頁開發人員都會喜歡其中的模板(Template)功能。但是當我們轉換到了ASP.NET平臺,卻不得不使用一個基本上只能算是文本編輯器的微軟開發環境(當然這應該是一個最完美的文本編輯器),微軟在圖形化網頁設計方面也只能算是一個門外漢。儘管如此,即使沒有所見即所得的圖形化設計界面,微軟以及其他開源志士們還是爲我們提供了豐富的Web窗體前端控件。其中的MasterPages可以說是最有用的,因爲它實現了Dreamweaver中的模板功能,而且在ASP.NET框架的支持下,使用模板變得更簡便,我們甚至可以編程爲自己的模板添加許多功能。

使用MasterPages實現Web窗體模板

定義模板控件

如果我們的窗體佈局分爲上中下三部分,而中間的部分是特定內容區域,那麼最終的模板內容可以像下面這樣:

<%@ Register TagPrefix="mp" namespace="Microsoft.Web.Samples.MasterPages" assembly="MasterPages" %>
<html>
    <body>
        <FORM runat="server">
            <TABLE width="100%" border=1>
                <TR><TD>頁眉</TD></TR>
                <TR><TD><mp:region id="regContent" runat="server">窗體內容</mp:region></TD></TR>
                <TR><TD>頁腳</TD></TR>
            </TABLE>
        </FORM>
    </body>
</html>

1、每一個MasterPage的模板都是一個用戶控件UserControl,在Visual Studio .NET環境中可以通過“項目->添加->Web用戶控件”爲項目新增一個UserControl。這個例子的用戶控件我取名叫"Template.ascx",放在Web項目的根路徑下。

2、在UserControl的HTML源代碼的頭部有這樣一行:

這是爲頁面註冊一個自定義的Tab標籤,有了這個標籤,才能使用MasterPages提供的各種控件。

3、爲模板設計窗體的公共部分,這些內容和普通的HTML頁面、ASP.NET Web窗體沒有任何區別,如果你的網頁使用了其他UserControl,而這些UserControl也是公共的,那麼同樣可以在這個模板內添加。總之,寫一個模板控件與設計一個Web窗體沒有什麼區別,我們所要做的,僅僅是保留窗體內的公共內容,除去特定內容。

4、在Web窗體內特定內容的位置,使用控件標記代替。在以上這個例子中,regContent就是窗體特定內容的區域,每一個窗體將在這裏填入自己的內容。

在窗體內使用模板

如果使用剛纔給出的模板示例,窗體的HTML源代碼如下:

<%@ language="c#" debug="true" trace="false" %>
<%@ Register TagPrefix="mp" namespace="Microsoft.Web.Samples.MasterPages" assembly="MasterPages" %>
<mp:contentcontainer runat="server" MasterPageFile="~/Template.ascx" id="Test">
    <mp:content id="regContent" runat="server">窗體內容測試</mp:content>
</mp:contentcontainer>

1、和模板控件一樣,使用MasterPages之前必須先註冊其Tag(代碼頭部的第二行)。

2、在窗體內添加一個mp:contentcontainer的控件,上面的例子裏它有三個屬性:
runat="server"——這個是所有Web控件必須具備的屬性;
MasterPageFile="~/Template.ascx"——告訴contentcontainer控件,此窗體使用的模板控件爲Web根路徑下的Template.ascx文件;
id="Test"——這個屬性並不是必須的,但是如果沒有或者在所有使用這個模板的窗體內此id有重複,在窗體的設計界面中我們將無法看見窗體的可視化結果,而僅僅顯示一個contentcontainer控件標記。

3、在之間加入,也就是窗體自身的內容,它的id必須和模板中定義的region對應。在以上這個例子中,只有一個content——regContent——它對應了模板中id爲regContent的region。

現在,模板和窗體都可以正常工作了。它們生成的結果就等同於這樣一個窗體:

<%@ language="c#" debug="true" trace="false" %>
<html>
    <body>
        <FORM runat="server">
            <TABLE width="100%" border=1>
                <TR><TD>頁眉</TD></TR>
                <TR><TD>窗體內容測試</TD></TR>
                <TR><TD>頁腳</TD></TR>
            </TABLE>
        </FORM>
    </body>
</html>

在“MasterPages實用技巧”的下一篇裏,你可以瞭解基於MasterPages的模板前端控制技巧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章