1. 跨网页POST:
WebForm1.aspx文件:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/WebForm2.aspx"/>
WebForm2.aspx文件:
protected void Page_Load(object sender, EventArgs e)
{
TextBox aTextBox = (TextBox)PreviousPage.FindControl("TextBox1");
this.Response.Write(aTextBox.Text);
}
PreviousPage本身属于Page类型,并只有在来源网页和目标网页属于相同的ASP.NET应用程序中,目标网页的
PreviousPage属性才会包含来源网页的引用;如果网页不是跨网页POST的目标,或者网页在不同的应用程序中,就
不会初始化PreviousPage属性。因此,在获取PreviousPage引用之前,应该先检查其可用性。
跨网页发布只能用在Button类型的控件中。经常用来传递参数,当参数非常多的时候,使用跨网页POST,比使
用URL传递参数要简洁的多。
2. 使用@PreviousPageType指令实现强类型的跨网页POST:在一个网页中只能有一个@PreviousPageType指令。
WebForm1.aspx文件:
//源网页的一个属性
public DateTime MyDateTime
{
get { return DateTime.Now; }
}
WebForm2.aspx文件:
<%@ PreviousPageType VirtualPath="~/WebForm1.aspx" %>
protected void Page_Load(object sender, EventArgs e)
{
//可以直接读取源网页对象的这个属性,必须是公有的
this.Response.Write(PreviousPage.MyDateTime.ToLongTimeString());
}
3. 使用@Reference指令实现跨网页POST:在一个网页中可以使用多个@Reference指令。
WebForm1.aspx文件:
//源网页的一个属性
public DateTime MyDateTime
{
get { return DateTime.Now; }
}
WebForm2.aspx文件:
<%@ Reference VirtualPath="~/WebForm1.aspx" %>
protected void Page_Load(object sender, EventArgs e)
{
//可以先声明一个源网页的对象
WebForm1 aWebForm2 = (WebForm1)PreviousPage;
//可以直接读取源网页对象的这个属性,必须是公有的
this.Response.Write(aWebForm2.MyDateTime.ToLongTimeString());
}