protected void Redirect_Click(object sender, EventArgs e) { Server.Transfer("menu.aspx"); } |
在这个接收面中我们现在可以获得Web页面的数据,代码如下:
protected void Page_Load(object sender, EventArgs e) { if (PreviousPage != null) { TextBox txtBox = (TextBox) PreviousPage.FindControl("txtUserName"); if (textBox != null) string userName = textBox.Text; //其他可执行的代码 } } |
要注意的是上面的代码必须将txtUserName控件转换为TextBox类型,以便可以访问其中的值。
七、使用PreviousPageType
PreviousPageType属性提供了在跨网页操作中访问源页面的强类型能力,下面让我们演示一下如何不通过任何类型转换来从源页面中获得控件值。代码如下:
<asp:Textbox ID="txtUserName" Runat="server" />
<asp:Textbox ID="txtPassword" Runat="server" />
<asp:Button ID="Submit" Runat="server" Text="Login"
PostBackUrl="Menu.aspx" />
要注意的是单击按钮可以重定向到一个叫“Menu.asp”的目标页。这个目标页可以使用如下的代码获得用户名和密码:
<%@ PreviousPageType VirtualPath="~/Login.aspx" %> <script runat="server"> protected void Page_Load(object sender, System.EventArgs e) { String userName = PreviousPage.txtUserName.Text; String password = PreviousPage.txtPassword.Text; //其他可执行代码 } |
在上面的代码中,PreviousPageType属性返回了一个源页面的强类型引用,这样就消除了类型转换。
八、保存视图状态
对于跨网页提交来说,ASP.NET2.0 内嵌了一个叫__POSTBACK的隐藏字段,这个字段包含了关于源页面的视图信息 -- 也就是由源页面提供了,包含了一个带有一个非空PostBackUrl属性值的服务端控件。目标页可以使用__POSTBACK中的信息来获得源页面的视图状态信息。代码如下:
if(PreviousPage!=null && PreviousPage.IsCrossPagePostBack && PreviousPage.IsValid) { TextBox txtBox = PreviousPage.FindControl("txtUserName"); Response.Write(txtBox.Text); } |
在上面的代码中核对了用于确保PreviousPage属性不为null的检查代码。顺便提一下,如果目标页和源页面不在同一个应用程序中,这个PreviousPage属性的值为null。只有在进行跨网页提交操作时,IsCrossPagePostBack属性才为true。
这个跨网页提交的特性,是ASP.NET2.0中最强有力的特性之一,这种技术将允许在一个页面中提交到另外一个页面,并且可以在目标页面地无缝地操作源页面中的数据。