[登录]
[注册]
天门门户网
论坛
标签
会员
帮助
论坛
»
网站开发
»
ASP.NET
»
ASP.NET2.0向其它网页传递信息的方法
天门话题
街头巷尾
美食美景
情感天地
单身男女
活动召集
品位生活
开心一笑
时尚节拍
图说世界
影音在线
游戏驿站
社区论坛
胡侃神聊
有问必答
网友互助
网友自拍
广而告之
电脑网络
操作系统
网上冲浪
软件交流
网站开发
Html
ASP.NET
社区管理
公告反馈
ASP.NET2.0向其它网页传递信息的方法
[
1218
查看 /
0
回复 ]
返回列表
发送短消息
生日
精华
0
性别
在线时间
2
查看公共资料
搜索帖子
netahui
组别
新手上路
帖子
4
积分
4
威望
0
金钱
-98.3 元
注册时间
2008-08-05
netahui
2008-08-08 18:51
|
只看楼主
楼主
字体大小:
t
T
传统办法
为了便于比较,我想花一分钟来回顾网页传递数据的老方法。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
abel ID="lblName" runat="server" Text="Name:">< /asp
abel>
< asp
extBox ID="txtName" runat="server">< /asp
extBox>< br />
< asp
abel ID="lblE-mailAddress" runat="server" Text="E-mail:">< /asp
abel>
< asp
extBox ID="txtE-mailAddress" runat="server">< /asp
extBox>< 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
abel ID="lblName" runat="server" Text="Name:">< /asp:Label>
< asp
extBox 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>
分享
转发
TOP
返回列表
上一主题
|
下一主题
发新主题
天门话题
街头巷尾
美食美景
情感天地
单身男女
活动召集
品位生活
开心一笑
时尚节拍
图说世界
影音在线
游戏驿站
社区论坛
胡侃神聊
有问必答
网友互助
网友自拍
广而告之
电脑网络
操作系统
网上冲浪
软件交流
网站开发
Html
ASP.NET
社区管理
公告反馈
公告反馈
网友互助
有问必答
影音在线
操作系统
单身男女
Html
街头巷尾
图说世界
帖子标题
作者
版块
我的资料