Asp.net页面传值的方式汇总

1.对比汇总

No 名称 适用范围 传递数据量大小 安全性 备注
1 Get方式
(QueryString)
页面间传递数据 少量数据
(最长为255个字符)
不安全
(数据暴露在url中)
方式:利用Get方式提交,参数附加到url上。
特点:简单、方便。
缺点:字符串长度最长为255个字符;数据泄漏在url中。
适用数据:简单、少量、关键的数据。
适用范围:传递给自己、传递给另一个目标页面;常用于2个页面间传递数据。 
存储位置:URL地址中
用法:如:url后加?UserID=…,跳转到目标页面,
            目标页面用Request.QueryString["UserID"]获取参数值
2 Post方式(Form) 页面间传递数据 大数据 相对安全 方式:利用form方式提交。
特点:常用技巧是把隐秘的数据存在隐藏域中由form提交。
适用数据:大量数据,包括文件上传。
适用范围:传递给自己、传递给另一个目标页面;常用于2个页面间传递数据。
存储位置: 存储在Http的body中(Post提交的表单数据存储在http body中)
用法:在客户端form指定action目标后submit提交,在目标页面用Request.Form["txtName"]获取
3 Server.Transfer
(页面对象的属性)
页面间传递数据 大数据 相对安全 方式:asp.net特有方式 。利用HttpContext获取发请求的页面的信息。
特点:可以直接存储对象。
缺点:注意强制转换的类型要正确。
适用数据:各种数据。
适用范围:页面之间传递复杂数据。 用法:获取Context.Handler将其转换为发请求的页面的实例,随后就可以轻松访问其form中的字段、甚至属性。其中的Context是指HttpContext对象,Handler是其属性,Context.Handler的意思可以理解为创建源页类的实例变量,而得到此实例之后,就可以直接访问其中的属性和Public方法了。
使用server.Transfer(url)提交,目标页面可以用Request.Form["txtName"]获取数据
4 Cookie 单个用户/站点所有页面 少量数据 不安全
(存储在客户端)
方式:将数据存在客户端的经典方法。
缺点:安全性低、受客户端设置限制、一个站点仅存20个cookie,每个容量4096字节。
有效期:自定义或被用户清除
适用数据:用户的会话数据(一般是用户名,用户的个性化设置信息等)
适用范围:单个用户、整个站点所有页面
存储位置:存储在客户端浏览器中
用法:引用Request.Cookies(读取信息)、Response.Cookies(写入信息)
、或用HttpCookieCollection直接创建Cookie对象。
5 Session 单个用户/站点所有页面
(整个会话期)
大数据
(内存中,取决于内存大小)
相对安全 方式:数据存储在服务器端。
特点:asp.net中可以设置session的存储方式、位置、SessionID的保存是否依赖cookie。
             可以直接存储对象。
缺点:默认存储在进程中的, 有失效的隐患
有效期:用户活动时间+自定义延迟。
适用数据:用户的特有信息。
适用范围:单个用户、整个站点所有页面。
存储位置:存储在服务器的内存中
用法:Session["User"] = value/object;
6 ViewState 页面自身传递数据 大数据 不安全 方式:asp.net特有机制,用来保存页面状态信息。
特点:将页面各控件及其所存数据序列化存在name为_ViewState的隐藏域中。
缺点:存在HTML中,安全性较低。可以设置加密和验证,但数据量会大增、效率有影响。
有效期:有效期等于页面的生命周期。
适用数据:页面PostBack需要保存的数据,数据太大会影响页面发送效率。
                     Web服务器控件都是用ViewState在页面PostBack期间保存状态
适用范围:页面自身数据保存。
存储位置:存储在页面的html中
用法:ViewState["User"] = value;(测试是否可以存储对象)
7 Appliction 所有用户/站点所有页面 大数据 相对安全 方式:将数据存储于此,相当于全局变量。
特点:可以直接存储对象。整个站点的共享数据。
有效期:应用程序生命周期。
适用数据:所有页面、所有用户共享的数据。
存储位置:存储在服务器的内存中
用法:Appliction["User"] = value|object;
8 Cache 所有用户/站点所有页面 大数据 相对安全 方式:将用户数据存储在服务端数据缓存中。
特点:可以大大提高效率。 可以直接存储对象。
缺点:数据更新不及时。
有效期:应用程序生命周期或自定义。
适用数据:所有页面、所有用户都可以共享的数据。
存储位置:存储在服务器端的缓存中
用法:Cache["User"] = value|object; 不需要则关闭 @page 里面设置EnableViewState=false
9 Static变量 所有用户/此类所有的页面 大数据 相对安全 方式: 将数据存于静态变量中。
特点:利于提高效率。
缺点:若用不好会致使用户或页面间数据紊乱,造成极大的隐患。
             建议只赋值一次,绝对禁   止为单个用户而更改此值。
适用数据:所有用户共享的数据。
适用范围:此类所有的页面实例。
存储位置:存储在服务器的内存中
用法:在class中声明静态变量。

2.总结

    应用范围:

      (1)页面自身保存数据可用的有ViewState,static变量
      (2)页面之间传递数据常用get,post,HttpContext,当然可以变通一下用于自身数据保存
      (3)单用户的所有页面数据共享常用session,cookie
      (4)整个应用程序(所有用户所用页面)的数据共享常用Appliction,cache,static变量

   建议
     在用Request的时候要指明所取的集合,比如Get方法传来的参数从QueryString集合取,Post的从Form取,Cookie从Cookies里取。
     虽然用Request[]集合,以上几种都可以取到,但是却造成性能上的浪费,本来直接在Form集合中,却遍历了QueryString,Form,Cookies等集合才取出来。

 3.相关源码

 PageTransferSolution.rar

 4.参考网址:

http://www.cnblogs.com/shengtianlong/archive/2010/08/11/1797608.html

http://blog.csdn.net/icerock2000/article/details/4267819

http://blog.csdn.net/fuyouhu2008/article/details/5198527

原文地址:https://www.cnblogs.com/johden2/p/2649687.html