中华网络安全联盟 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 进程知识 技术论坛
中华网络安全联盟 >> 程序开发 >> .Net >> ASP.NET2.0向其它网页传递信息的方法
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
用在JavaScript的Requ
ASP.NET2.0中控件的简
asp.net客户端回调功能
ASP.Net用MD5和SHA1加
asp.net中生成缩略图并
ASP.NET 设计中的 N 个
asp.net读取数据库乱码
ASP.NET1.1中动态树的
ASP.NET2.0向其它网页传递信息的方法
字体:

中华网络安全联盟    作者:奇趣    来源:奇趣技术网    时间:2008-5-25 16:47:08

传统办法

为了便于比较,我想花一分钟来回顾网页传递数据的老方法。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方法。

[NextPage]

使用先前页面

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程序的时候,可要好好利用这个新概念的优势啊。

[NextPage]
< %@ 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>

 

[NextPage]

  < %@ Page language="vb" %>

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

  < html>< head>

  < title>Cross Postback Example 2< /title>

  < /head>< body>

  < script language="vb" runat="server">

  Sub Page_Load()

  If Not (Page.PreviousPage Is Nothing) Then

  If Not (Page.IsCrossPagePostBack) ThenResponse.Write("Name:" + CType(PreviousPage.FindControl("txtName"), TextBox).Text + "< BR>")Response.Write("E-mail:" + CType(PreviousPage.FindControl("txtE-mailAddress"), TextBox).Text + "< BR>")

  End If

  End If

  End Sub

  < /script>< /body>< /html>

        

[NextPage]

  < %@ Page language="vb" %>

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

  < html>< head>

  < title>Cross Postback Example< /title>

  < script language="vb" runat="server">

  Public ReadOnly Property Name

  Get

  Return Me.txtName.Text

  End Get

  End Property

  Public ReadOnly Property E-mailAddress

  Get

  Return Me.txtE-mailAddress.Text

  End Get

  End Property

  < /script>< /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>

[NextPage]

  < %@ Page language="vb"

  %>

  < %@ Reference Page="~/CrossPostback1.aspx" %>

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

  < html>< head>

  < title>Cross Postback Example 3< /title>

  < /head>< body>

  < script language="vb" runat="server">

  Sub Page_Load()

  Dim cppPage As CrossPostback1_aspx

  If Not (Page.PreviousPage Is Nothing) Then

  If Not (Page.IsCrossPagePostBack) Then

  If (Page.PreviousPage.IsValid) ThencppPage = CType(PreviousPage, CrossPostBack1_aspx)Response.Write("Name:" + cppPage.Name + "< br>")Response.Write("E-mail:" + cppPage.E-mailAddress)

  End If

  End If

  End If

  End Sub

  < /script>< /body>< /html>

字体:
 
设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
Copyright©2006-2008 中华网络安全联盟 All rights reserved.