ViewSate理解、禁用

ViewSate字面意思,页面状态、视图状态。

ViewState特点

1、ViewState是WebForm的特性。

2、ViewState是页面级的,即只能在当前页面中操作,不能跨页面。

3、ViewState的内容都是在html页面上存储的,存储在id、name都是“__VIEWSTATE”、type是“hidden”的input中,如下

ViewSate添加:

ViewState["a"] = "a";
ViewState["b"] = "b";
ViewState["c"] = "c";
ViewState["d"] = "d";

ViewSate在html页面中的显示形式:

4、只有aspx页面的form中有runat="server"时,最终呈现的html页面上才会存在id为"__VIEWSTATE"的input,此时,在.cs文件中任然可以使用ViewSate,但是此时的ViewSate只能实现类似全局变量的功能。

5、ViewState中的内容对用户是可见的,可以使用ViewSate查看器(ViewSateDecoder)解析出里边的内容,上面的内容解析如下:

ViewSate理解、禁用_第1张图片

IndexedString是键,String是值,所以,一些敏感的信息不建议存储在ViewSate中。

ViewState使用过程

请求aspx页面时,如果aspx页面的form中有runat="server",会在页面上添加id为"__VIEWSTATE"的隐藏的input,并将ViewState中的内容进行序列化、Base64编码后存储在这个input中,之后在页面页面回传的时候,ViewState的内容作为表单中的一项回传到服务端,服务端得到数据后进行Base64解码,得到本次页面回传前一次的ViewSate数据。所以只有在页面回传的过程中,ViewState才有意义,页面中没有页面回传操作,ViewState的作用不大。

ViewState禁用

ViewState的主要作用是维护WebForm中服务器控件的状态,而现在越来越注重页面大小、整洁度的情况下,服务器控件基本上已经是过去式了,各网站也都在去服务器控件,因此为了压缩页面大小,通常都会禁用ViewState。禁用后html页面中仍然存在"__VIEWSTATE",但是内容很短,此时在.cs中的ViewSate仍然能使用,但是ViewSate只能实现类似全局变量的功能。

页面级禁用,在页面顶部添加EnableViewState="false"

<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" CodeFile="Test.aspx.cs" Inherits="Test" %>

项目中禁用,在WebConfig的system.web中添加

其他

服务器控件Button按钮点击后 ,实际上执行的是页面回传的操作,此时Page_Load方法先执行,OnClick方法后执行。

页面第一次加载:输入页面地址打开页面的过程是第一次加载。

页面回传:点击html页面上submit按钮触发的表单提交,如服务器控件的OnClick事件。

PS:在前端技术越来越成熟的情况下,ViewSate基本上是过去式了

附上两个在2008年讨论ViewState的帖子

https://bbs.csdn.net/topics/230052606

https://bbs.csdn.net/topics/230063194

 

你可能感兴趣的:(C#,.NET)