传统办法

为了便于比较,我想花一分钟来回顾网页传递数据的老方法。HTML的表格元素有一个action(动作)属性,用来指定服务器端哪项资源(所谓资源,是指一个网页、一段脚本、程序等)来处理这些提交的数据。下面的代码便是一个样例。

<wbr></wbr>
< html>
 < head>< title>Sample HTML form< body>
< form name="frmSample" method="post" action="target_url">
< input type="text" name="fullname" id="fullname" />
< input type="button" name="Submit" value="submit" />
<wbr></wbr>

在文本域(名字是fullname)中输入的值将被提交给表单元素的action属性指定的页面或者程序。对于ASP.NET开发者,即使曾经用过标准HTML表单,也是极不多见的。

<wbr></wbr>

ASP.NET开发者面对要从一个网页向另一个网页传递数据信息的任务时,方法选择的余地是异常广阔的。它们包括会话变量(session variables)、cookies、querystring 变量、caching(网页缓存),甚至Server.Transfer方法,但是ASP.NET 2.0还提供了另外一种选择。

<wbr></wbr>

ASP.NET 2.0提供的又一办法

在设计ASP.NET 2.0的时候,微软认识到了在网页间交叉传递数据的需求。有了这个意识之后,就为ASP.NET的button(按钮)控件增加了一项PostBackUrl属性。它允许你在用户提交的时候,指明这张表单和上面的数据送往何方(也就是由PostBackUrl属性指定的URL值确定)。一般来讲,跨页传递是客户端在后台使用JavaScript进行传送的过程。

<wbr></wbr>

使用先前页面

ASP.NET页面经由跨页投递的调用而载入的时候,它上面的对象的IsPostBack属性不会被触发。不过,有一项叫做PreviousPage(前一页)的属性使你能够访问和使用那些应用跨页投递的页面。

每当一个跨页请求发生时,当前页的PreviousPage属性就把促发投递的页面引用保存下来。如果页面的产生不是来自跨页投递的激发,或者说页面处于不同的程序组,那么PreviousPage属性将不会被初始化。

<wbr></wbr>

<wbr></wbr>

看个例子:

<wbr></wbr>

QuestionWrite.aspx

<asp:DropDownList ID="drpLesson" runat="server" Height="22px" Width="140px">
 </asp:DropDownList><asp:ImageButton ID="ImageButton1" ImageUrl="~/images/next2.gif" runat="server" PostBackUrl="~/Teacher/QuestionAnswer.aspx" />
<wbr></wbr>

QuestionAnswer.aspx.cs

DropDownList d = (DropDownList)this.PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("drpLesson");
<wbr></wbr>

这里使用的是模板页,所以使用FindControl的时候,需要有注意点。