• 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

  • 相关阅读:
    排列组合算法
    C++内存管理——堆&&栈
    编程之美——1.2 中国象棋将帅问题
    Gentoo: fcitx的安装
    Gentoo NTFS USB盘有写权限
    Gentoo U盘无法自动挂载,打开报告Not Authorized,xfce只有logout,suspend/shutdown灰化等问题解决方法
    Kernel: 打开CONFIG_EMBEDDED从而使更多的kernel option可以更改
    Gentoo Enable framebuffer console (没有安装X,KDE的时候)
    转载:Gentoo和Ubuntu包管理命令对比集
    Gentoo Rebuild virtualboxmodules when kernel is updated
  • 原文地址:https://www.cnblogs.com/johden2/p/2649687.html
Copyright © 2020-2023  润新知