一.Page類
所有頁面都繼承自Page類,同時頁面作為控制項對象被執行個體化,所以所有的web表單都是Page類的一個執行個體。
因此,每個被建立的空白頁面本身就已經實現了大量的功能。可以通過VS中的智能感知看到這些方法和屬性。
比如:FindControl,RegisterStartupScript方法; IsPostBack,Session,Application,Cache,Request,Response屬性等
值得注意的是,類似Session這些內建對象對應於Page類的一個屬性,它暴露具有完整功能類的執行個體。
例如:Session對象就是System.Web.SessionState.HttpSessionState類的執行個體。
二.作為控制項容器的頁面
web表單可以視為一個存放各種控制項的容器。而各種控制項本身也可以看作是一個存放其他控制項的容器。
比如有如下HTML:
<div>這是一段HTML</div>
<form id="form1" runat="server">
<asp:Panel ID="Panel1" runat="server">
<asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:Panel>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
<div>這是一段HTML</div>
C#代碼:
private void DisplayControls1()
{
foreach (Control control in this.Controls)
{
this.Response.Write(control.GetType().ToString() + "——<b>" + control.ID + "</b><br/>");
}
}
private void DisplayControls2(ControlCollection controls, int depth)
{
foreach (Control control in controls)
{
Response.Write(new string('-', depth * 2) + ">");
Response.Write(control.GetType().ToString() + "——<b>" + control.ID + "</b><br/>");
if (control.Controls != null)
{
DisplayControls2(control.Controls, depth + 1);
}
}
}
DisplayControl1()方法將不能完全頁面上的所有的伺服器控制項,它只遍曆了頁面容器中的第一層控制項。
除去Head以外,按順序將遍曆到如下控制項Literal——HtmlForm——Literal
asp.net對頁面使用控制項物件模型,會將HTML靜態內容塊建立成LiteralControl。
DisplayControl2()方法能夠遍曆出頁面上的所有伺服器端控制項,從代碼中可以看出,每個控制項本身也可以被視為一個容器。
Page類具有Controls屬性,Control類同樣具有Controls屬性。
清清楚楚asp.net系列學習部落格目錄
參考資料:Pro ASP.NET 3.5 in C# 2008