asp.net|頁面
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 Form頁 (.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等諸位大哥的文章,在次對他們表示中心的感謝,首次發文章,文筆粗糙,狗尾續貂還請各位不吝指教。