全国统一热线:
028-86758058
18980748058
购买流程
付款方式
常见问题
在线提问
续租服务
购物车(
0
件)
用户名:
密 码:
记住
首 页
HOME
域名注册
DOMAIN
虚拟主机
WEB HOST
成品网站超市
AUTO Site
VPS主机
VPS SERVER
云 主 机
CLOUD HOST
租用托管
SERVER
海外主机
HK HOST
代理专区
AGENT
客服中心
SERVICE
站长教程
SERVICE
欢迎光临西部数据云计算中心,我们将竭诚为您提供最优质的服务!
中文域名
域名转入
域名转出
DNS管理
动态域名
获取域名证书
域名停放
域名过户
集群主机
双线主机
基本主机
港台主机
论坛主机
Linux主机
Vip合租主机
超G型主机
ASP.net主机
Java主机
智能建站主机
网店主机
美国主机
数据库
成品网站超市
智能建站主机
集群VPS主机
国内VPS主机
香港VPS主机
美国VPS主机
云主机介绍
云主机购买
服务器租用
主机托管
常见问题
香港主机
港台主机
美国主机
国内免备案
步骤流程
代理级别
代理合同
代理模式
代理优势
在线申请
产品列表
常见问题
代理商分布图
常见问题
有问必答
跟踪提问
购买流程
产品价格
付款方式
常用软件
网站备案
续租服务
汇款确认
相关文档
联系我们
域名资讯
主机资讯
行业动态
网页制作
php教程
mysql教程
域名资讯
云计算资讯
网络编程
您当前的位置:
首页
>
网络编程
>
Net教程
ASP.NET 页面之间传递值方式优缺点比较
时间:2015-01-29 来源:互联网 作者:佚名
本题考查面试者对ASP.NET中多页面传值的理解是否全面。因为ASP.NET的页面表单提交到自身,完成回传的功能,所以默认情况下不能使用POST方式进行多页面传值。关于这些传值方式的分析如下所示。
1.URL传值
这是经典的传值方式,这种方法的使用非常简单,不过所传递的值是会显示在浏览器的地址栏上的,而且不能传递对象。所以这种方法一般用于传递的值少且安全性要求不高的情况下。在*.aspx页面开发中可以使用超级链接文本进行传值,如以下代码所示。
<asp:HyperLink runat="server" ID="HpLink"
NavigateUrl="~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd">URL传值</asp:HyperLink>
以上链接文本将页面跳转到GetValues.aspx页面,并且通过URL传递urlvalue1变量和urlvalue2变量,其值分别为intel和amd。在*.cs的
服务器
端方法中也可以调用HttpResponse对象的Redirect方法,将浏览器端重定向到新页面并通过URL传值,如以下代码所示。
Response.Redirect(“~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd”);
2.Session传值
这种方法将每份数据存储于服务器变量中,可以传递比较多的数据,并且安全性较高,所以常用于用户身份的验证功能中。不过,Session变量如果存储过多的数据会消耗过多的服务器资源,编程者在使用时应该慎重,其使用方法如以下代码所示。
Session["SessionValue"] = “ATI”;
//也可以用索引存储
Session[0] = “ATI”;
//在其他页面的服务器端方法中取值方式为:
string str = Session["SessionValue"].ToString();
//也可以用索引获取
string str = Session[0].ToString();
Session的可在应用程序的多个页面中以名称/值对的方式共享,直到浏览用户关闭自己的浏览器或者服务器Session超时(可设置,默认为20分钟)。
3.Cookie传值
Cookie是一种比较特殊的数据存储方式,因为这种方式将数据存储于浏览用户的电脑中,以文本文件的形式存在于磁盘中。这种方式非常有意思,很多登录系统就是利用Cookie实现用户自动登录。即用户登录一次的登录信息将被写入到用户电脑的Cookie文件中,下次登录时,网站自动读取该Cookie完成身份验证。通过Cookie传递数据虽然很方便,保存时间可以自由设置,但是安全性不高,编程者不应过于依赖Cookie,而应采用结合的方式完成敏感数据的存储。
ASP.NET中操作Cookie的主要类型位于System.Web命名空间下,分别为HttpCookie、HttpResponse以及HttpRequest。HttpCookie可建立和操作独立Cookie的安全类型,访问HttpResponse和HttpRequest的Cookies属性可以获取HttpCookieCollection集合对象,以读取或添加HttpCookie对象。添加Cookie的方法如以下代码所示。
//创建一个HttpCookie 对象,向构造函数传递名称值
HttpCookie ck = new HttpCookie("CookieValue");
//设置ck的“Value”属性(值)
ck.Value = “Cookie值”;
//设置ck的过期时间为当前时间加上360s,即6分钟后失效
ck.Expires = DateTime.Now.AddSeconds(360);
//设置ck有效范围(域限制)
ck.Domain = "www.google.cn";
//将ck添加至HttpCookieCollection对象
Response.Cookies.Add(ck);
//也可为以下方法添加
//Response.AppendCookie(ck);;
读取用户的Cookie则更为简单,只需根据名称读取HttpCookieCollection集合对象中的子项即可,如以下代码所示。
string str = Request.Cookies["CookieValue"].Value;
除此之外,还可以利用一个HttpCookie存储多个名称/值对形式的Cookie信息,如以下代码所示。
HttpCookie ck = new HttpCookie("CookieValue");
//以名称/值对的方式添加多个Cookie信息
ck.Values.Add("value1", “on
e”);
ck.Values.Add("value2", "two");
//设置ck的过期时间为当前时间加上100年,即100年后失效
ck.Expires = DateTime.Now.AddYears(100);
//通过以下两种方法添加
Response.Cookies.Add(ck);
//Response.AppendCookie(ck);
读取这些Cookie如以下代码所示。
string str = "值1:"+Request.Cookies["CookieValue"].Values["value1"];
str += "值2:" + Request.Cookies["CookieValue"].Values["value2"];
说明:多数浏览器支持最多可达4096字节的Cookie,如果要将为数不多的几个值保存到用户计算机上,浏览器还限制了每个站点可以在用户计算机上保存的Cookie数量。大多数浏览器只允许每个站点保存20个Cookie。如果试图保存更多的Cookie,则最先保存的Cookie就会被删除。还有些浏览器会对来自所有站点的Cookie总数作出限制,这个限制通常为300个。用户可以设置自己的浏览器,拒绝接受Cookie,这种情况下只能结合其他的数据存储方式。
4.Server.Transfer传值
这个方法的步骤相对较多,使用该方法编程者可以在另一个页面以公开对象属性的方式来存取值,使用这种方法是面向对象的。该方法的代码编写并不复杂,首先通过定义一个public权限的属性,该属性可返回所需传递的值。然后在第两个页面中,使用Context.Handler属性来获得前一个页面实例对象的引用,即可通过访问自定义的属性获取需要的值。
假设SendValues.aspx页面为传递数据的页面,在SendValues.aspx.cs的页面类中定义一个public属性,通过get直接返回需要传递的值(可为页面中某个服务器控件的属性值)。
public string TransferData
{
get
{
return "VIA";
}
}
在SendValues.aspx.cs的某个方法(如Button控件的Click事件处理方法)中调用HttpServerUtility对象的Transfer方法,如以下代码所示。
Server.Transfer("~/GetValues.aspx");
假设GetValues.aspx为第二个页面,在GetValues.aspx.cs的Page_Load方法中接收前一个页面所传递的值,方法如以下代码所示。
//定义SendValues类型的变量SV_Page
SendValues SV_Page;
//访问HttpContext对象的Handler属性,将值转换为SendValues类型,引用赋值给SV_Page
SV_Page = (SendValues)Context.Handler;
//SV_Page即为SendValues.aspx页面类的对象,直接获取其TransferData属性值
string str = SV_Page.TransferData;
可见,这种方法对于有面向对象基础的编程者而言非常容易理解。不过页面间如果需要传递数量比较多的值,这种方法需要定义过多的属性,略显繁杂。编程者还可以直接使用HttpContext对象的“Iterms”属性添加多项名称/值对的数据,在SendValues.aspx.cs调用HttpServerUtility对象的Transfer方法的某个方法中,修改代码如下所示。
Context.Items["value1"] = "on
e";
Context.Items["value2"] = "two";
在GetValues.aspx.cs的Page_Load方法中接收前1个页面所传递的值,修改代码如以下代码所示。
string str = "值1:" + Context.Items["value1"].ToString();
str += "值2:" + Context.Items["value2"].ToString();
5.Application传值
严格地说应该是通过HttpApplication对象在服务器端生成一个状态变量来存储所需的信息,该HttpApplication对象变量的可用范围覆盖整个WEB应用程序。所以该对象一般存储一些要公布的信息,如在线人数等,而对于那些涉及用户个人的敏感数据则不用这种方法存储。HttpApplication对象有两个常用的方法,即Lock和UnLock方法,可用于处理多个用户对存储在Application变量中的数据进行写入的问题。Lock方法锁定全部的Application变量,从而阻止其他用户修改Application对象的变量值,UnLock方法则解除对HttpApplication对象变量的锁定。通过HttpApplication对象传值的方法和Session比较相似,在页面类的某个方法中编写代码如下所示。
Application["a"] = "微软公司";
Application["b"] = "苹果公司";
Application["c"] = “Mac”;
以上代码很轻松地将三个字符串值保存在HttpApplication对象的变量中了,并且这些变量是整个程序共享的,其他用户通过相应的页面同样可以获取。获取这些变量的方法如以下代码所示。
Application.Lock();
string str = "值1:" + Application["a"];
str += "值2:" + Application["b"];
str += "值3:" + Application["c"];
Application.UnLock();
注意:虽然使用方式和Session相似,但是Session是对于每个单独的用户,当该用户关闭浏览器,则Session失效。HttpApplication对象存储的变量是针对所有访问程序的用户,即使有用户关闭了浏览器,变量的值不会丢失。
6.跨页面传送
跨页面传送和调用HttpServerUtility对象的Transfer方法有相似之处,不过效率更高。因为调用HttpServerUtility对象的Transfer方法是基于服务器的方法,而跨页面传送是基于浏览器端的。这个方法主要是设置控件的“PostBackUrl”属性,使该控件(如Button)操作后转向指定页面,并且这个指定页面可以直接获取前一个页面的所有控件对象及其属性值。假设第一个页面为SendValues.aspx,在该页面中(非*.cs代码文件)添加两个控件,设置如以下代码所示。
<asp:TextBox runat="server" ID="PbValue" Text="Geforce TX280"></asp:TextBox>
<asp:Button runat="server" ID="btn6" Text="跨页面传送方式" PostBackUrl="~/GetValues.aspx" />
以上代码中,TextBox控件的“Text”属性为“Geforce TX280”,这是所需要传送的值。而Button控件的“PostBackUrl”属性指定了GetValues.aspx页面,该页面即可接收所需传递的值。在GetValues.aspx.cs的Page_Load方法中,编写以下代码。
//PreviousPage为向当前页面传输控件的页面
if (PreviousPage != null)
{
//从PreviousPage容器中搜索“ID”为PbValue的控件,并转换为TextBox类型
TextBox tb = (TextBox)PreviousPage.FindControl("PbValue");
//如果tb不是空引用
if (tb != null)
{
//将tb的“Text”属性值给str变量
string str = tb.Text;
}
}
以上代码轻松获得了前一个页面中TextBox控件的“Text”属性值,这种方法比调用HttpServerUtility对象的Transfer方法更加快捷,并减少了处理步骤。
以上为常用的页面间传值方法,如果有特殊需要,还可以使用其他方法,例如通过
数据库
存储临时数据等。
来顶一下
返回首页
推荐资讯
asp.net 代码隐藏的编码模型
一.内联代码与代码隐藏 代码隐藏模型相对内联代码的优势: 1
asp.net FreeTextBox配置详解
如图所示: 这就是我们在网页上编辑文字时经常使用的东西。
相关文章
ASP.NET Cookie 操作实现
浅析ASP.NET生成随机密码函数
asp.net 防止用户通过后退按钮重复提交表单
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.N
asp.net 代码隐藏的编码模型
asp.net DbProviderFactory的使用-示例
ASP.NET 返回随机数实现代码
asp.net FreeTextBox配置详解
asp.net cookie的读写实例
栏目更新
栏目热门
返回首页
关于我们
联系我们
付款方式
价格总览
资讯中心
友情链接
媒体关注
有问必答
投诉建议
网站备案
《中华人民共和国增值电信业务经营许可证》编号:川B2-20080058号
官方网址:
xibushuju.com
西部数据
Copyright © 2002~2015
天府快车
版权所有
电话总机:
028-86758058
(50线) 传真:
028-86758058