手机版

状态保存机制的视图状态概述及应用

时间:2021-10-04 来源:互联网 编辑:宝哥软件园 浏览:

无状态Http的根本原因是浏览器和服务器使用Socket进行通信,服务器将请求结果返回给浏览器后会关闭当前的Socket连接。并且服务器会在处理完页面后销毁页面对象。在应用层面,原因是浏览器和服务器之间的通信遵循HTTP协议。查看器发送的请求都由实现IHttpHandler接口的对象响应。由于下一次访问不一定是最后一个响应的对象,该对象可能在最后一次响应后已经被销毁,写入的类变量值不再存在,因此状态信息无法保存在类变量中。编写一个ashx拷贝代码如下: private int I;public void process request(HttpContext上下文){ context。响应。内容类型='文本/纯文本';语境。回应。写(一);}经过几次刷新,我们发现变量根本记不住最后一个值。对网站的影响:如果用户输入了一些信息,跳转到下一页时,数据丢失,无法再获取数据。如果我们想知道最后的状态信息,我们必须在某个地方记录这个状态信息:a .服务器端的Session,b .浏览器端的Cookie,c .表单元素——比如:隐藏字段Input Type="hidden"/(HTTP消息)ViewState

四个重要的视图状态:ASP。NET的。aspx页面是唯一的和页面级的;这是一种将客户端单独使用的数据保存在页面隐藏字段中的方法。服务器控件的值自动保存在视图状态中;cookie:http协议下的一种方式,通过它服务器或脚本可以维护客户端上的状态信息;这是一种在客户端保存客户端单独使用的数据的方法。就像你的病历一样,医院会直接带你回家。会话:与提供的辅助流程相关。网.一种在服务器端保存客户端单独使用的数据的方法;就像银行账户一样,所有的钱都在银行,所以你拿着银行卡[所谓的SessionId]回家(写在客户的Cookie里);应用:一种在服务器端保存共享数据的方法;就像银行里一个单独的公共厕所,谁都可以进去,但是一次进去一个,进去的时候锁门,出来的时候开锁;ViewState(页级)的使用模式:页级范围-数据保存模式:复制的代码如下: ViewState[' my key ']=' my data ';读取数据模式:复制代码如下:String myDataif(ViewState['myKey']!=null) { myData=(字符串)ViewState[' MyKey '];} ViewState不能存储所有数据类型,只支持:String、Integer、Boolean、Array、ArrayList、Hashtable。使用ViewState的前提是页面上必须有服务器端的表单标签(form runat="server ")。服务器收到用户的页面请求后,自动查找__VIEWSTATE的隐藏字段是否包含在请求消息中,如果包含,则解码中间值并将其添加到页面的VIEWSTATE属性中。当服务器输出时,它会自动将视图状态中的值添加到表单中名为__VIEWSTATE的隐藏字段中。VIEWSTATE适合同一个页面多次与服务器交互而不关闭。目标页面不会加载跨页面提交的__VIEWSTATE。将runat=server添加到页面的ViewState属性以生成html页面。源代码如下

未添加以下:

__VIEWSTATE隐藏域生成原理复制代码代码如下://当页面类对象执行PR方法时,首先创建控制树,然后通过loadState方法执行请求消息中名为__VIEWSTATE的值,然后对该值进行de-base64编码、反序列化,最后还原成一个集合,然后将属于程序员本人的键值对添加到VIEWSTATE中[ViewState将在页面中自动添加runat=s。在执行Page_Load之前,服务器控件]的属性和状态被还原为页面对象的ViewState属性。参见图Protected Void Page _ Load(Object Sender,EventArgs E){//页面的ViewState属性实际上是在浏览器提交的名为__VIEWSTATE的隐藏字段中获取if (ViewState['name']的值!=null){ string strName=ViewState[' name ']。ToString();回应。write(' ViewState[' name ']' strName);} else {//向ViewState添加键值对。//ViewState。添加('姓名','流氓');同理,ViewState[ 'name']='痞子'//本质就是给隐藏域添加键值对。如果没有提交给服务器,ViewState['name']将始终为null。viewstate ['name2']='流氓三毛';}}以上代码原理图:

补充:禁用ViewState的方法,禁用单个控件的ViewState,设置enableviewstate=false。要禁用整个页面的,请在aspx的页面指令区域添加EnableViewState='false '。内部网系统和互联网背景可以自由使用视图状态。但不要在互联网前台使用【注意:禁用只是不保存服务器控件的属性和值,但隐藏字段依然存在】WebForm的IsPostBack内部实现是判断页面或get参数是否包含参数名__ViewState,并返回bool值进行确认:复制的代码如下:protected void Page_Load。(对象发送方,event args e){ if(ispostback)//返回Response。Write('只要浏览器提交的请求消息包含关键字_ _ VIEWSTATE ');//添加?页末地址http://localhost 33607148/在ate.aspx查看?__VIEWSTATE将输出此代码,否则为Response。Write('ASP。NET会将页面的IsPostBack属性设置为true’);}

版权声明:状态保存机制的视图状态概述及应用是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。