在开发asp.net项目中,大部分人都会经常使用 QueryString,Sesson,等进行页面间跳转的参数转递,使用这些页面属性各有适合的应用场景和优缺点。本文介绍种非常便捷的两种跨页面传送数据的方式。
跨页面的传送就是提交页面,并把这个页面和所有的控件值都传送给另一个页面。
第一种:
建立Page1.aspx页面如下:
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="转到Page2" PostBackUrl="~/Default4.aspx"/>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Image ID="preImg" runat="server" ageUrl="~/Img/step0.jpg"
Width="164px" />
</div>
</form>
</body>
再建立Page2.aspx页面如下:
<form id="form1" runat="server">
<div>
<asp:image ID="Image1" runat="server" Height="84px" Width="192px"></asp:image>
</div>
</form>
现在是要在Page2.aspx中显示Page1.aspx控件的相应值。只需要在Page2.aspx中修建该控件类型的一个实例,在Page2页面的Page_Load事件中使用PreviousPage的FindControl方法填充该实例即可,赋予FindControl方法的String值是Id,它用前一个页面的服务器控件。赋予值之后就可以处理该服务器控件 及其值了。就好像它一开始就位于当前页面上一样。代码如下:
protected void Page_Load(object sender, EventArgs e)
{
TextBox preTxt=(TextBox)PreviousPage.FindControl("TextBox1");
Image preImg=(Image)PreviousPage.FindControl("preImg");
Response.Write(preTxt.Text);
this.Image1.ImageUrl = preImg.ImageUrl;
}
运行后在页面上的文本框中输入Page1,点击按钮结果如图:
第二种方式:
在Page1.aspx中创建该控件的属性。
public TextBox pp_TextBox1 {get { return TextBox1; } }
public Image pp_Img{ get { return preImg; } }
为了处理Page1.aspx,中的属性,必须把PreivousPage属性强类型化为Page1.aspx.为些,要使用@PreviousPageType指令。@PreviousPageType指令是一个新指令,用于处理ASP.Net3.5提供的跨页面传送新功能。这个指令只包含两个属性:
TypeName:设置回送时的派生类的名称。
VirtualPath:设置回送时所传送页面的地址。
<%@ PreviousPageType VirtualPath="~/Page1.aspx" %>
这个指令允许使用VirtualPath属性指向Page1.aspx.之后就可以在Page2.aspx中使用PreivousPage属性通过代码提示查看到Page1.aspx的属性了。这个指令用于指定跨页面的传送过程起始于哪个页面。剩下的实现方法类型第一种方式。
这里面有个问题,若没有点击按钮直接在地址栏输入Page2.aspx访问的话,将会发生错误。使用IsCrossPagePostBack属性就可以很容易处理这个问题.加上
If(PreviousPage!=null && PreviousPage. IsCrossPagePostBack)