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类的实例返回。