ASP.NET/Page
外觀
< ASP.NET
System.Web.UI.Page類用於頁面的一次加載與繪製。
page類執行順序:
- 獲得客戶端的post請求
- page類的繼承類被構造
- page類的ProcessRequest方法被調用
- init事件被執行,發生在所有服務器端控件的狀態(ViewState)被存儲之前
- page類的虛函數CreateChildControls被調用
- 服務器端控件的狀態(來自post變量和ViewState)被存儲
- load事件被執行,發生在所有服務器端控件的狀態被存儲之後和所有的事件被觸發之前
- 我們自定義的服務器端控件的事件被執行
- PreRender事件被執行,發生在所有事件被觸發之後和要回發給客戶端的html還沒有回發(呈現)之前
- page類的虛函數Render方法被調用
- page類的虛函數RenderChildren方法被調用
- Http響應發往客戶端
- unload事件被執行,發生在所有html都回發完成以後
- page類的繼承類被解構。
PostBackUrl執行跨頁面發送
[編輯]一種方法是在新頁面的Page_Load事件處理程序中,PreviousPage屬性用來得到前一個頁面的引用;再用FindControl()方法從前面頁面中獲取某個控件。
第二種替代方法,可以通過頁面屬性來暴露控件。下例中,代碼A.aspx.cs中通過SearchString 屬性暴露了txtSearch的值。這個頁面將表單數據發送到B.aspx中
A.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="A.aspx.cs" Inherits="A" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title> <asp:Literal ID="Literal1" runat="server"/></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="lbsearch" runat="server" Text="Search:"></asp:Label>
<asp:TextBox ID="txtSearch" runat="server"></asp:TextBox> <asp:Button ID="btnSearch"
runat="server" PostBackUrl="B.aspx" Text="Go!" />
</form>
</body>
</html>
A.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class A: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
public string SearchString
{
get { return txtSearch.Text; }
}
}
B.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="B.aspx.cs" Inherits="B" %>
<%@PreviousPageType VirtualPath="~/Default.aspx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div><asp:Label ID="lblSearch" runat="server"></asp:Label></div>
</form>
</body>
</html>
B.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class ButtonSearchResults : System.Web.UI.Page
{
protected void Page_Load()
{
if (PreviousPage!=null)
{
lblSearch.Text = String.Format("SearchFor:{0}",PreviousPage.SearchString);
}
}
}
在B.aspx中包含一個<%@PreviousPageType%>, 這個指令把PreviousPage 屬性返回的值轉換成ButtonSearchType類的實例。如果沒有這個指令,PreviousPage 屬性會把前頁面作為通用的Page類的實例返回。