在.NET Framework中,Page類為ASP.NET應用程式從.aspx檔案構建的所有對象提供基本行為。該類在namespace System.Web.UI命名空間中定義,從TemplateControl中派生出來,實現了IHttpHandler介面:
public class Page : TemplateControl, IHttpHandler
TemplateControl是向ASP.NET頁面和使用者控制項提供準系統的抽象類別。Control類位於這個層次的頂端。它定義由所有的ASP.NET伺服器端元素(頁面,控制項)共用的屬性、方法和事件。結構圖如下:
Page對象的重要屬性
ClientQueryString:擷取請求的 URL 的查詢字串部分。這個屬性可以用於處理特殊格式的 URL查詢字串。
Visible:這是一個重寫自Control類的屬性,如果頁面的Visible為false,ASP.NET不會為此頁面產生任何HTML代碼,這時只顯示使用Response.write輸出的文本。
IsValid:擷取一個值,該值指示頁驗證是否成功。這個屬性在使用驗證控制項時常用。
IsPostBack:擷取一個值,該值指示該頁是否正為響應用戶端回傳而載入,或者它是否正被首次載入和訪問。如果是為響應用戶端回傳而載入該頁,則為 true;否則為 false。這個屬性相當常用,我們常常是在第一次訪問頁面時進行某些初始化,回傳時不進行某些初始化工作,這時候我們就要在page_load事件中使用這個屬性判斷是否是回傳。
Request:擷取請求的頁的 System.Web.HttpRequest 對象。
Response:擷取與該 System.Web.UI.Page 對象關聯的 System.Web.HttpResponse 對象。該對象使您得以將 HTTP 響應資料發送到用戶端,並包含有關該響應的資訊。
Session:擷取 ASP.NET 提供的當前 Session 對象。
Theme:擷取或設定頁面主題的名稱。
Title:擷取或設定頁的標題,如果需要動態更換瀏覽器網頁標題,這個屬性很有用。
Controls: 擷取 System.Web.UI.ControlCollection 對象,該對象表示 UI 階層中指定伺服器控制項的子控制項。這是繼承於Control類的屬性。當我們需要訪問頁面中的控制項時它很有用。
Page對象的重要方法
DataBind():將頁面中所有的資料繫結控制項綁定到資料來源。
例如:
int[] a = { 1,2,3,4};
GridView1.DataSource = a;
GridView2.DataSource = a;
this.DataBind();
我們可以使用頁面的DataBind()方法將兩個GridView綁定到資料來源。
FindControl():在頁命名容器中搜尋帶指定標識符的伺服器控制項。這裡要注意的是這個方法並不搜尋自身是命名容器的子控制項,如果需要搜尋網頁面的所有控制項,可以使用遞迴方法。
SetFocus(Control control):將瀏覽器焦點設定為指定控制項。這是一個非常有用的方法,比方說我們希望頁面載入後,焦點在TextBox1對話方塊上,我們可以在page_load事件中輸入如下代碼:
this.SetFocus(TextBox1);
Page對象的重要事件
請參見http://www.cnblogs.com/nuaalfm/archive/2008/09/11/1289325.html
我們都知道,所有的aspx的代碼分離類都是繼承於這個Page類的,但有的時候我們可能發現有一些頁面的部分功能大量重複,我們可以將這些重複的部分抽象出來到一個類,讓這個類繼承於Page類,然後再讓那些代碼分離類繼承於這個類,我們這裡舉一個實用的例子:
有時我們可能希望我們的頁面支援在textbox中輸入值後,單擊斷行符號後我們可以動態指定調用哪一個按鈕的方法。
頁面基類為:
Code
namespace Sample
{
public class Page : System.Web.UI.Page
{
public Page()
{
} // Internals
public void TieButton(Control TextBoxToTie, Control ButtonToTie)
{
// Init jscript
string jsString = "";
// Check button type and get required jscript
if (ButtonToTie is LinkButton)
{
jsString = "if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {"
+ this.ClientScript.GetPostBackEventReference(ButtonToTie, "").Replace(":", "$") + ";return false;} else return true;";
}
else if (ButtonToTie is ImageButton)
{
jsString = "if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {"
+ this.ClientScript.GetPostBackEventReference(ButtonToTie, "").Replace(":", "$") + ";return false;} else return true;";
}
else
{
jsString = "if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {document."
+ "forms[0].elements['" + ButtonToTie.UniqueID.Replace(":", "_") + "'].click();return false;} else return true; ";
}
// Attach jscript to the onkeydown attribute - we have to cater for HtmlControl or WebControl
if (TextBoxToTie is HtmlControl)
{
((HtmlControl)TextBoxToTie).Attributes.Add("onkeydown", jsString);
}
else if (TextBoxToTie is WebControl)
{
((WebControl)TextBoxToTie).Attributes.Add("onkeydown", jsString);
}
}
}
}
頁面類為:
Code
public partial class _Default : Sample.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.TieButton(TextBox1, Button2);
}
}