ASP2.0向其它网页传递信息的方法

 
ASP2.0 向其它网页传递信息的方法
标准 HTML 表单( form 元素)允许你向另外一个页面或者应用程序传递和发送数据信息,方法是使用表单元素。在 ASP.NET 1.x 中,网页则利用投递机制,把页面数据提交给该页本身。对于 ASP.NET 2.0 ,它的功能有所扩展,能够允许跨页提交。这周就让我们来探讨这个新特性。
传统办法
为了便于比较,我想花一分钟来回顾网页传递数据的老方法。 HTML 的表格元素有一个 action (动作)属性,用来指定服务器端哪项资源(所谓资源,是指一个网页、一段脚本、程序等)来处理这些提交的数据。下面的代码便是一个样例。
<html>
<head><title>Sample HTML form</title></head>
<body>
<form name="frmSample" method="post" action="target_url">
<input type="text" name="fullname" id="fullname" />
<input type="button" name="Submit" value="submit" />
</form>
</body></html>
在文本域(名字是 fullname )中输入的值将被提交给表单元素的 action 属性指定的页面或者程序。对于 ASP.NET 开发者,即使曾经用过标准 HTML 表单,也是极不多见的。
ASP.NET 开发者面对要从一个网页向另一个网页传递数据信息的任务时,方法选择的余地是异常广阔的。它们包括会话变量( session variables )、 cookies querystring 变量、 caching( 网页缓存 ) ,甚至 Server.Transfer 方法,但是 ASP.NET 2.0 还提供了另外一种选择。
ASP.NET 2.0 提供的又一办法
在设计 ASP.NET 2.0 的时候,微软认识到了在网页间交叉传递数据的需求。有了这个意识之后,就为 ASP.NET button( 按钮 ) 控件增加了一项 PostBackUrl 属性。它允许你在用户提交的时候,指明这张表单和上面的数据送往何方(也就是由 PostBackUrl 属性指定的 URL 值确定)。一般来讲,跨页传递是客户端在后台使用 JavaScript 进行传送的过程。
清单 A 中的 ASP.NET 页面拥有两个文本域(分别表示 name (名字)和 e-mail (电子邮件)),以及一个用来提交数据的 button (按钮)。这个提交按钮的 PostBackUrl 属性被指定为另外一个网页,这样使得表单提交的时候,数据可以发送到那个页面。 注意: 这个例子中,表单元素通过设置 method( 方法 ) 属性,让表单提交时采用 post[2] 提交方式,但这不是必要的,因为所有 cross postback( 跨页投递 ) 根据设计均使用 post 方法。
使用先前页面
ASP.NET 页面经由跨页投递的调用而载入的时候,它上面的对象的 IsPostBack 属性不会被触发。不过,有一项叫做 PreviousPage (前一页)的属性使你能够访问和使用那些应用跨页投递的页面。
每当一个跨页请求发生时,当前页的 PreviousPage 属性就把促发投递的页面引用保存下来。如果页面的产生不是来自跨页投递的激发,或者说页面处于不同的程序组,那么 PreviousPage 属性将不会被初始化。
你可以通过检查 PreviousPage 对象来确定页面的载入是否为跨页投递的结果。值如果为 null ,则说明是普通的载入,而非 null 值则表明网页来自跨页投递。此外,页面类( Page class )还包含了一个称作 IsCrossPagePostBack 的方法( method ),专门用来确定页面是不是跨页投递的结果。
一旦确定发生了跨页投递,你就可以通过 PreviousPage 对象的 FindControl 方法去访问调用页( calling page )上的控件。 清单B 中的代码是我们例子中的第二页;它由前面列出的页面所调用。
这个页先判断它是不是由跨页投递所调用。如果是,就通过 FindControl 方法访问来自调用页的数值,并把用此方法得到的控件转换为 TextBox 控件,然后显示它们的 Text( 文本 ) 属性的内容。
你可以把整个 PreviousPage 对象转换成触发跨页投递的页面类型。这个方法允许你访问页面的全局属性( public properties )和方法。在我给出这项技术的实例之前,我有必要重写第一个例子,包含进一些全局属性。 清单C 是添加了两个属性的第一个清单,这两个属性用于访问域值。
既然现在属性已经建好,那你就能很容易访问它们。要警惕的是, Page 类的 PreviousPage 对象必须转换成正确的类型,这样才能正确访问它的属性。这可以通过把它转换成合适的 page 类别的对象加以实现。
清单 D 说明了这一点,它在页面头部定义了调用页的一项引用,那样这个引用类型就能在代码中使用。通过这项引用,实际的 VB.NET 代码使用 CType 函数把 PreviousPage 对象转换成了适当的类型。这之后,那些属性就可以像代码示范的那样使用了。
关于上述清单中 PreviousPage 对象 IsValid 方法的使用在此提醒一下:前页的 IsValid 属性保证你对它操作之前,它已通过所有合法验证测试。
总结
在网页间传递数据参数有很多项应用,包括保持个人用户信息。祖传的网页解决方案,像使用 querystring cookies ,允许你很容易当提交发生时从一个页面指向另一个页面。
ASP.NET 1.1 除了提供额外方法外,对这些方法也能很好地支持,可是, ASP.NET 2.0 依靠跨页投递,使这方面又有了长足发展。它让一个网页处理来自另一网页的数据变得简单。在你开发你的下一个 ASP.NET 2.0 程序的时候,可要好好利用这个新概念的优势啊。
<%@ Page language="vb" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<html><head>

<title>Cross Postback Example</title>

</head><body>

<form id="frmCrossPostback1" method="post" runat="server">

<asp:Label ID="lblName" runat="server" Text="Name:"></asp:Label>

<asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />

<asp:Label ID="lblE-mailAddress" runat="server" Text="E-mail:"></asp:Label>

<asp:TextBox ID="txtE-mailAddress" runat="server"></asp:TextBox><br />

<asp:Button ID="btnSubmit" runat="server" Text="Submit" PostBackUrl="CrossPostback2.aspx" />

</form></body></html>
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值