今天晚上没事在办公室看看ASP.NET2.0高级编程(特别版),看到跨页传送的时候就顺便动手练习一下。并且顺带着发现了作者在这的一个错误。P75页关于判断页面是否是跨页面传送的时候少加了一个条件,PreviousPage!=null。如果没有这个条件的话,处理普通的页面就会出现空引用的异常。
跨页面传送是ASP.NET2.0引进的一个新特性。可以将A页面的值传给第二个页面,而不是传统的只提交给A页面自己。 假设目前有两个页面A和B,要想让B页面获取到A页面的值,需要在B页面上的设置<%@ PreviousPageType VirtualPath="~/Default.aspx" %>,如图:
同时将A页面要传递的值写一个属性,B页面可以通过属性来访问A页面传递的值。这里是将一个文本框的值传递过去。同时在A页面上放一个按钮,设置按钮的postbackurl属性为B页面的URL,代码如下:
<
form
id
="form1"
runat
="server"
>
< asp:ScriptManager ID ="ScriptManager1" runat ="server" />
< div >
< asp:Button ID ="Button1" runat ="server" OnClick ="Button1_Click" PostBackUrl ="~/CrossPost.aspx"
Text ="Button" ValidationGroup ="ww" />
< asp:TextBox ID ="TextBox1" runat ="server" ></ asp:TextBox >
< asp:RequiredFieldValidator ID ="RequiredFieldValidator1" runat ="server" ErrorMessage ='<bgsource src ="C:WindowsMediaWindows XP Error.wav" > '
SetFocusOnError="True" ControlToValidate="TextBox1" EnableClientScript="TRUE" ValidationGroup="ww">* </ asp:RequiredFieldValidator >
< br />
< asp:LinkButton ID ="LinkButton1" runat ="server" OnClick ="LinkButton1_Click" > LinkButton </ asp:LinkButton ></ div >
</ form >
</ body >
< asp:ScriptManager ID ="ScriptManager1" runat ="server" />
< div >
< asp:Button ID ="Button1" runat ="server" OnClick ="Button1_Click" PostBackUrl ="~/CrossPost.aspx"
Text ="Button" ValidationGroup ="ww" />
< asp:TextBox ID ="TextBox1" runat ="server" ></ asp:TextBox >
< asp:RequiredFieldValidator ID ="RequiredFieldValidator1" runat ="server" ErrorMessage ='<bgsource src ="C:WindowsMediaWindows XP Error.wav" > '
SetFocusOnError="True" ControlToValidate="TextBox1" EnableClientScript="TRUE" ValidationGroup="ww">* </ asp:RequiredFieldValidator >
< br />
< asp:LinkButton ID ="LinkButton1" runat ="server" OnClick ="LinkButton1_Click" > LinkButton </ asp:LinkButton ></ div >
</ form >
</ body >
public
TextBox UserName
... {
get
...{
return TextBox1;
}
}
... {
get
...{
return TextBox1;
}
}
在B页面,这在判断页面是否是跨页面传送的时候要上PreviousPage是否为空,要不正常的页面传送过去就会出现空引用的异常,ASP.NET高级编程的示例代码中就没有判断,会出错。
protected
void
Page_Load(
object
sender, EventArgs e)
... {
if (!IsPostBack)
...{
if (PreviousPage!=null && PreviousPage.IsCrossPagePostBack)
...{
Response.Write("跨页传值:" + PreviousPage.UserName.Text);
//Response.Write("<script language=javascript>alert('跨页传的值为:" + PreviousPage.UserName.Text + "');</script>");
}
else
...{
Response.Write("普通的页面转换,不是跨页!");
}
}
}
... {
if (!IsPostBack)
...{
if (PreviousPage!=null && PreviousPage.IsCrossPagePostBack)
...{
Response.Write("跨页传值:" + PreviousPage.UserName.Text);
//Response.Write("<script language=javascript>alert('跨页传的值为:" + PreviousPage.UserName.Text + "');</script>");
}
else
...{
Response.Write("普通的页面转换,不是跨页!");
}
}
}