asp.net 提供兩個用于管理可視元素和代碼的模型,即單文件頁模型和代碼隱藏頁模型。具體內容可以參考msdn(ms-help://ms.msdnqtr.v80.chs/ms.msdn.v80/ms.visualstudio.v80.chs/dv_aspnetcon/html/81b13e7a-b95b-4285-906f-d2dd77411417.htm)。
在asp.net forums的頁面中使用了代碼隱藏頁模型,但是與典型的代碼隱藏頁模型又稍有區別。
default.aspx的內容如下:
<%@ page language="c#" %>
<%@ import namespace="aspnetforums.components" %>
<%@ register tagprefix="forums" namespace="aspnetforums.controls" assembly="aspnetforums.controls" %>
<%@ register tagprefix="mp" namespace="metabuilders.webcontrols.masterpages" assembly="metabuilders.webcontrols.masterpages" %>
<mp:contentcontainer runat="server" id="mpcontainer" masterpagefile="~/themes/masterpage.ascx">
<mp:content id="headtag" runat="server">
<meta http-equiv="refresh" content="300" />
</mp:content>
<mp:content id="maincontent" runat="server">
<forums:forumgroupview runat="server" />
</mp:content>
</mp:contentcontainer>
首先讓我們先熟悉一下asp.net的指令語法:指定當頁和用戶控件編譯器處理 asp.net web 窗體頁 (.aspx) 和用戶控件 (.ascx) 文件時所使用的設置。
asp.net 頁框架支持以下指令:
@ page 定義 asp.net 頁分析器和編譯器使用的特定于頁的屬性。只能包含在 .aspx 文件中。
@ control 定義 asp.net 頁分析器和編譯器使用的控件特定屬性。只能包含在 .ascx 文件(用戶控件)中。
@ import 將命名空間顯式導入頁或用戶控件中。
@ register 將別名與命名空間及類名關聯起來,從而允許用戶控件和自定義服務器控件在被包括到請求的頁或用戶控件時呈現。
@ assembly 在編譯過程中將程序集鏈接到當前頁,以使程序集的所有類和接口都可用在該頁上。
根據指令語法語法我們解讀一下default.aspx:
<%@ page language="c#" %>
http://www.knowsky.com指定在對頁中的所有內聯呈現(<% %> 和 <%= %>)和代碼聲明塊進行編譯時使用的語言為c#
<%@ import namespace="aspnetforums.components" %>
將命名空間顯式導入到 asp.net網頁中,同時使導入的命名空間的所有類和接口可用于文件。
<%@ register tagprefix="forums" namespace="aspnetforums.controls" assembly="aspnetforums.controls" %>
創建標記前綴forums,與程序集aspnetforums.controls中的命名空間aspnetforums.controls相關聯。
<%@ register tagprefix="mp" namespace="metabuilders.webcontrols.masterpages" assembly="metabuilders.webcontrols.masterpages" %> (略)
繼續往下看頁面部分,其中主要是metabuilders的master pages 控件的用法,具體用法可參考venjiang大哥的文章(了解master pages庫),類似asp.net 2.0中的masterpage
<mp:contentcontainer runat="server" id="mpcontainer" masterpagefile="~/themes/masterpage.ascx">
<mp:content id="headtag" runat="server">
<meta http-equiv="refresh" content="300" />
</mp:content>
<mp:content id="maincontent" runat="server">
<forums:forumgroupview runat="server" />
</mp:content>
</mp:contentcontainer>
其中mp:contentcontainer中的masterpagefile指定了"母版頁"的位置,mp:content通過id與"母版頁"中的mp:region相對應,最終的效果是在加載default.aspx的時候先加載母版頁,然后default.aspx中的mp:content添加到母版頁中對應的mp:region位置,形成最終的效果。
<meta http-equiv="refresh" content="300" />頁面每300秒刷新一次
<forums:forumgroupview runat="server" />
表示在此位置上是forums:forumgroupview控件,根據頁面指令我們得知對應的控件為aspnetforums.controls.forumgroupview,
namespace aspnetforums.controls
{
/**//// <summary>
/// 論壇組列表服務器控件
/// </summary>
public class forumgroupview : skinnedforumwebcontrol
{
}
}
forumgroupview繼承自skinnedforumwebcontrol,并實現抽象方法initializeskin,實現了代碼分離和換皮膚。繼續向下查看forumgroupview的皮膚文件名view-forumgroupview.ascx:
<!--廣告-->
<forums:ads zone="googleadsense" runat="server" />
<!-- 用戶登錄消息及注冊 -->
<% if ( users.getuser().isanonymous ) { %>
<table width="100%" cellspacing="0" cellpadding="5" border="0">
<tr>
<td>
<!-- forumgroupview.header.end -->
<forums:login skinfilename="skin-loginsmall.ascx" runat="server" id="login1" />
<!-- forumgroupview.maincentent.start -->
</td>
</tr>
</table>
<% } %>
……
然后下一個嵌套的過程又開始了。
寫此篇文章,大量參考了venjiang,寶玉,ugoer等諸位大哥的文章,在次對他們表示中心的感謝,首次發文章,文筆粗糙,狗尾續貂還請各位不吝指教。
新聞熱點
疑難解答
圖片精選