ViewState
ViewState["key"] = "value";在后台输入这段代码,在前台浏览会生成
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjkPFgIeA2tleQUFdmFsdWVkZOJehgmZf58s85cI+39pgF1pPFcyVM1IiB6lpeVMlIHT" />
ViewState以键值对形式存在隐藏域当中,服务器将ViewState里保存的值经过Base64编码后,自动添加到页面的隐藏域中。
我们把value用ViewStateDecoder打开会看到是保存在一个ArrayList中
我们输入两个ViewState
ViewState["key"] = "value"; ViewState["key2"] = "value2";再看结果
这样我们可以通过Response.Write(ViewState["key"].ToString());//输出结果为value
注意:ViewState不能存储所有的数据类型,仅支持可序列化对象。
非单值服务器控件的状态也自动保存在ViewState中
例如:下拉框。(文本框是单值控件,所以不会保存在ViewState中)服务器在接收到用户请求一个页面后,会自动在请求报文中找看是否包含__VIEWSTATE的隐藏域,如果有,则将中间的值解码后添加到页面的ViewState属性中。
服务器在输出的时候,也会自动的将ViewState中的值添加到表单里名叫__VIEWSTATE的隐藏域中,VIEWSTATE适用于同一个页面在不关闭的情况下多次与服务器交互
使用ViewState的前提:页面上必须有一个服务器端窗体标记(<form runat=“server”>)
禁用ViewState
禁用ViewState后还是会生成ViewState,但是生成的没 那么多,因为不会保存服务端控件的值,ViewState主要保存服务器端控件的属性值,用户定义的ViewState键值对,禁用控件的事件仍旧可以用.
禁用ViewState的方法,禁用单个控件的ViewState设定enableviewstate=false,禁用ViewState以后TextBox版本不受影响,Div版本受影响,因为input的value不依靠ViewState。
禁用整个页面的,在aspx的Page指令区加上EnableViewState="false" 。内网系统、互联网的后台可以尽情的用ViewState。
当某些控件的某些属性不属于浏览器表单的提交范围时,fw将会把这些属性添加到ViewState中保存。WebForm的IsPostBack依赖于__ViewState