重点总结
在ASP.NET中,要想从目标页获取源页的数据信息,可以使用两种方法:
一是通过获取源页的控件进而获取控件的属性值。
二是直接通过获取源页公开的公共属性来获取源页数据。
本示例代码则演示如何通过获取源页的公共属性达到获取源页数据的目的。
为了达到这样的目的,必须要将Page.PreviousPage属性引用的源页进行强类型的转换。
这可以通过为目标页添加@PreviousPageType指令,或者@Reference指令。
一、@PreviousPageType
示例代码
本示例代码中,源页中包含一个文本框控件,以便用户可以输入自己的姓名。并且源页也包含一个名为UserName的公共属性,此属性返回的就是用户在文本框控件中输入的用户名。
源页的代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SourcePage.aspx.cs" Inherits="SourcePage" %> <!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"> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="UserNameTextBox" runat="server"></asp:TextBox> <br /> <asp:Button ID="SubmitButton" runat="server" Text="提交到目标页" PostBackUrl="~/DestinationPage.aspx" /> </div> </form> </body> </html>
源页中的UserName公共属性的定义如下:
/// <summary> /// 用来获取用户在页面文本框中输入的用户名。 /// </summary> public string UserName { get { return this.UserNameTextBox.Text; } }
接着应该在目标页中添加@PreviousPageType指令:
<%@ PreviousPageType VirtualPath="~/SourcePage3.aspx" %>
此指令有两个属性,除了VirtualPath以外,还有一个名叫TypeName,这两个属性只要设置其中一个就可以了。
经过上面这些定义之后,就在目标页上通过类似下面的代码来访问源页的UserName公共属性了。
if (this.PreviousPage != null) { this.Response.Write(this.PreviousPage.UserName); }
是不是相当的简单呢?这是@PreviousPageType指令相对于@Reference的一个优势。它自动就对Page.PreviousPage进行了强类型的转换。
二、@Reference
除了@PreviousPageType指令以外,另外一个可用的指令就是@Reference。
此指令同样是添加在目标页中,而不是源页中,可不要搞错了。
示例代码以@PreviousPageType的那个代码为基础进行修改。
首先删除目标页上的@PreviousPageType指令,然后添加@Reference指令。
<%@ Reference VirtualPath="~/SourcePage.aspx" %>
只要做这些修改就可以了。最后就可以使用类似下面的代码在目标页中访问源页的公共属性了。
if (this.PreviousPage != null) { SourcePage PreviousPage = (SourcePage)this.PreviousPage; this.Response.Write(PreviousPage.UserName); }
注意和@PreviousPageType指令做比较。这里对Page.PreviousPage进行了显示的类型转换,如果不这样做的话,将无法访问源页中的公共属性。而@PreviousPageType则不需要显示的类型转换。