zoukankan      html  css  js  c++  java
  • ViewState

    ViewState是.Net中提出的状态保存的一种新途径,web程序保存状态的方式有这样几种:
    1、Application:保存在Application中的数据是全局有效的;Application里面存放的

    应该是访问较多,修改较少并且是全局至少大部分功能会使用的数据,例如计数器或者数

    据库连接串等。
           Application.Lock();
            ((int)Application["Count"])++;
            Application.Unlock();

    2、Session  在Asp.Net内部,有一个StateApplication来管理Session,
    3、Cookie 
    4、ViewState
    实际上ViewState并不神秘,就是一个Hidden字段,但是它是服务器控件状态保存的基础


    如:
    <form name="form1" method="post" action="modi_user_info.aspx"

    language="javascript" onsubmit="javascript:return WebForm_OnSubmit();"

    id="form1">
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value=""

    />
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"

    value="/wEPDwUKLTIzODM0NzQ5OQ9kFgICAQ9kFgRmDw8WAh4EVGV4dAUHamFzbWluZWRkAgg

    PDxYCHwAFDDA1OTEwMDAwMDYxM2RkZA==" />

    做过Web程序的人可能都有这种痛苦的体会,有时候为了处理页面上面比较复杂的功能,

    常常会加很多Hidden,然后在服务器端用一大堆判断来分析目前的状态,写起来烦人,

    写完了代码更是难看;实际上,ViewState就是帮我们系统的实现了保存控件状态的功能

    ,服务器端控件能够在多次请求间保存状态也全靠它。

    1、ViewState是存放在客户端,因此会减轻服务器的负担,是一种比较好的保存数据的

    方式。
       2、因为ViewState本身的限制,只能保存可以序列化的对象,而且最好不要放太多东

    西,能省则省,以免在减慢传输的速度,以及加重服务器解析的负担。
       3、我们通过很简单的方式就可以把ViewState里面的值获取出来,我们上面讨论了一

    些,虽然没有把解析的代码写出来,但是利用LosFormatter可以得到ViewState反序列

    化后的对象,那么要解析出来简直是易如反掌;所以ViewState在安全性上面还是比较差

    ,建议不要
    存放比较机密和敏感的信息,尽管ViewState可以加密,但是由于ViewState要保存在客

    户端,天生就有安全性的隐患。
    [C#]
    // 保存在 ViewState 中
    ViewState["SortOrder"] = "DESC"; 字串5

    // 从 ViewState 中读取
    string sortOrder = (string)ViewState["SortOrder"];


    如果要使用 ViewState,则在 ASPX 页面中必须有一个服务器端窗体标记 (<form

    runat=server>)。窗体字段是必需的,这样包含 ViewState 信息的隐藏字段才能回传

    给服务器。而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面

    时,ASP.NET 页面框架才能添加隐藏的字段。

    在页面不回传的情况下,可以通过省略服务器端的 <form> 标记来去除页面中的

    ViewState。  

  • 相关阅读:
    【题解】 保镖 半平面交
    【题解】 CF1492E Almost Fault-Tolerant Database 暴力+复杂度分析
    【题解】 闷声刷大题 带悔贪心+wqs二分
    【题解】 「WC2021」表达式求值 按位+表达式树+树形dp LOJ3463
    EasyNVR及EasyRTC平台使用Go语言项目管理GoVendor和gomod的使用总结
    一天一个开发技巧:如何基于WebRTC建立P2P通信?
    HTML5如何实现直播推流?值得学习一下!
    java后端学习-第一部分java基础:Scanner的基本使用
    java后端学习-第一部分java基础:三元运算符、运算符优先级、标识符、关键字和保留字
    java后端学习-第一部分java基础:赋值运算符
  • 原文地址:https://www.cnblogs.com/roboot/p/5015273.html
Copyright © 2011-2022 走看看