加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

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

发布时间:2023-08-01 15:14:39 所属栏目:Asp教程 来源:
导读:标准html表单(form元素)允许你向另外一个页面或者应用程序传递和发送数据信息,方法是使用表单元素。在asp.net 1.x中,网页则利用投递机制,把页面数据提交给该页本身。对于asp.net 2.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) then
 
if not (page.iscrosspagepostback) then
 
response.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>
 
这个页先判断它是不是由跨页投递所调用。如果是,就通过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 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>
 
既然现在属性已经建好,那你就能很容易访问它们。要警惕的是,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_aspx
 
if not (page.previouspage is nothing) then
 
if not (page.iscrosspagepostback) then
 
if (page.previouspage.isvalid) then
 
cpppage = 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>
 
说明了这一点,它在页面头部定义了调用页的一项引用,那样这个引用类型就能在代码中使用。通过这项引用,实际的vb.net代码使用ctype函数把previouspage对象转换成了适当的类型。这之后,那些属性就可以像代码示范的那样使用了。
 
关于上述清单中previouspage对象isvalid方法的使用在此提醒一下:前页的isvalid属性保证你对它操作之前,它已通过所有合法验证测试。
 
总结
 
在网页间传递数据参数有很多项应用,包括保持个人用户信息。祖传的网页解决方案,像使用querystring和cookies,允许你很容易当提交发生时从一个页面指向另一个页面。
 
asp.net 1.1除了提供额外方法外,对这些方法也能很好地支持,可是,asp.net 2.0依靠跨页投递,使这方面又有了长足发展。它让一个网页处理来自另一网页的数据变得简单。在你开发你的下一个asp.net 2.0程序的时候,可要好好利用这个新概念的优势啊。
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章