了解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进行传送的过程。

<%@ 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>

中的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)上的控件。下面的代码是我们例子中的第二页;它由前面列出的页面所调用。

<%@ 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) ThenIf 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 IfEnd IfEnd Sub</script></body></html>

这个页先判断它是不是由跨页投递所调用。如果是,就通过FindControl方法访问来自调用页的数值,并把用此方法得到的控件转换为TextBox控件,然后显示它们的Text(文本)属性的内容。

你可以把整个PreviousPage对象转换成触发跨页投递的页面类型。这个方法允许你访问页面的全局属性(public properties)和方法。在我给出这项技术的实例之前,我有必要重写第一个例子,包含进一些全局属性。下面代码是添加了两个属性的第一个清单,这两个属性用于访问域值。

<%@ 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 NameGetReturn Me.txtName.TextEnd GetEnd PropertyPublic ReadOnly Property E-mailAddressGetReturn Me.txtE-mailAddress.TextEnd GetEnd 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>

既然现在属性已经建好,那你就能很容易访问它们。要警惕的是,Page类的PreviousPage对象必须转换成正确的类型,这样才能正确访问它的属性。这可以通过把它转换成合适的page类别的对象加以实现。

<%@ 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_aspxIf Not (Page.PreviousPage Is Nothing) ThenIf Not (Page.IsCrossPagePostBack) ThenIf (Page.PreviousPage.IsValid) ThencppPage = CType(PreviousPage, CrossPostBack1_aspx)Response.Write("Name:" + cppPage.Name + "<br>")Response.Write("E-mail:" + cppPage.E-mailAddress)End IfEnd IfEnd IfEnd Sub</script></body></html>

说明了这一点,它在页面头部定义了调用页的一项引用,那样这个引用类型就能在代码中使用。通过这项引用,实际的VB.NET代码使用CType函数把PreviousPage对象转换成了适当的类型。这之后,那些属性就可以像代码示范的那样使用了。

关于上述清单中PreviousPage对象IsValid方法的使用在此提醒一下:前页的IsValid属性保证你对它操作之前,它已通过所有合法验证测试。

总结

在网页间传递数据参数有很多项应用,包括保持个人用户信息。祖传的网页解决方案,像使用querystring和cookies,允许你很容易当提交发生时从一个页面指向另一个页面。

ASP.NET 1.1除了提供额外方法外,对这些方法也能很好地支持,可是,ASP.NET 2.0依靠跨页投递,使这方面又有了长足发展。它让一个网页处理来自另一网页的数据变得简单。在你开发你的下一个ASP.NET 2.0程序的时候,可要好好利用这个新概念的优势啊。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索网页
, 表单
, asp.net readonly
, 页面
, 方法
, 属性
, 一个
, 投递
, 跨页保存
代码页转换
asp传递参数、asp.net 传递参数、vue2.0组件数据传递、asp.net mvc 传递参数、asp传递参数给js,以便于您获取更多的相关知识。

时间: 2024-12-10 11:00:17

了解ASP2.0向其它网页传递信息的方法的相关文章

asp2.0 cms菜单错位 求处理方法

问题描述 asp2.0cms菜单错位求处理方法CSS这段是:/*hovermenustyling*/div.menu{margin:0;height:25px;width:780px;font-family:'belgrano',serif;zoom:1;float:right;}.menuulli{margin:0001px;padding:0;}.menu{position:relative;display:block;z-index:50;margin:0;}.menuulliulliul

在ASP.NET2.0里打印网页指定的内容(比如打印网页里的一个Table)

原文:在ASP.NET2.0里打印网页指定的内容(比如打印网页里的一个Table)打印指定内容: <html> <head> <script   type= "text/javascript "   language= "javascript "> function   printPage()   {   var   newWin   =   window.open( 'about:blank ', ' ', ' ');   va

VC++6.0如何控制网页元素实现自动操作?

问题描述 VC++6.0如何控制网页元素实现自动操作? VC++6.0如何控制网页元素实现自动操作?如自动选择,点选,读取数据 解决方案 通过webbrowser控件来操作页面 解决方案二: CHtmlView类在文档/视图结构的上下文中提供WebBrowser控件的功能.WebBrowser控件是客户可浏览网址以及本地文件系统和网络文件夹的窗口.具体情况,请参阅"WebBrowser风格的应用".希望能帮助你 解决方案三: Das ist stimmt via

用VS2003开发的WEB应用程序为什么不能在asp2.0环境下不能调试.

问题描述 我的一台机器IIS中的ASP是1.1版本的,可以调试,但是另外一台是2.0的,开发的所有WEB应用程序都是只能使用,却无法调试.出现的错误提示是"试图运行项目时出错,无法在WEB服务器上启动调试".我的开发工具是VS2003.这该怎么办啊? 解决方案 解决方案二:看看是不是你的启动方式设置为虚拟目录的方式而不是自动的,这样情况不能调试,还有就是你的模式是DEBUG的吗,如果你用VS2003项目转VS2005可能会自动把他的启动模式改变了,调下就OK了解决方案三:模式是DEBU

1.我明明用vs2003开发的网站,为何用expression web打开时候,却提示说需asp2.0组件?

问题描述 1.我明明用vs2003开发的网站,为何用expressionweb打开时候,却提示说需asp2.0组件?2.我vc#2003下,调试asp.net1.1时候,提示:试图运行项目出错:无法在web服务器上启动调试.调试失败,因为没有启动集成windows身份验证.

最近学习ASP2.0相关的几个小问题(非创新性文章)

很久没有写技术日志了,主要是最近研究的不多.不过刚刚从事asp 2.0网站开发.在过程中遇到了一些简单的问题.特把这些内容摘要记录一下. (1)ASP2.0调用客户端的脚本:在PageLoad事件处理中,添加如下代码: //在页面全部载入后,执行该脚本~if (!this.IsClientScriptBlockRegistered(key)) {     this.RegisterStartupScript(key, string.Format("<script language=\&qu

CSS网页制作技巧:隐藏网页元素的方法汇总

文章简介:CSS网页制作技巧:隐藏网页元素的方法汇总. 在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间:有的可以响应点击,有的不能响应点击.下面一个个列出,选一个适合你的 { display: none; /* 不占据空间,无法点击 */ }{ visibility: hidden; /* 占据空间,无法点击 */ }{ position: absolute; top: -999em; /* 不占据空间,无法点击 */ }{ position: rela

asp.net2.0开发遇到的小问题解决方法

asp.net|解决|问题 asp.net2.0开发遇到的小问题解决方法一.页面比较长,如果页面提交到服务器时保存滚动条的位置,可以使用下面的两种方式:1.Page.MaintainScrollPositionOnPostback当网页回发到服务器时,用户将返回到该页的页首.在较长的网页中,这意味着用户必须将页滚动到该页的上一位置.当 MaintainScrollPositionOnPostback 属性设置为 true 时,用户将返回到该页的上一位置.2. Page.SmartNavigati

js实现从中间开始往上下展开网页窗口的方法

 这篇文章主要介绍了js实现从中间开始往上下展开网页窗口的方法,是非常实用的js窗口效果,需要的朋友可以参考下     本文实例讲述了js实现从中间开始往上下展开网页窗口的方法.分享给大家供大家参考.具体分析如下: 这个是从中间然后慢慢向上下展开的页面显示效果,也还不错,代码如下: 代码如下: <html> <head> <title>js从中间展开的网页窗口显示</title> <style> <!-- .intro{ position: