View State的理解(如有误,欢迎拍砖)
View State是Asp.net的专有的,也不是什么高深的东西,让我们来慢慢理解它。。
ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制。在WEB窗体(FORM)的设置为runat="server",这个窗体(FORM)会被附加一个隐藏的属性_VIEWSTATE。_VIEWSTATE中存放了所有控件在ViewState中的状态值。
当请求某个页面时,ASP.NET把所有控件的状态序列化成一个字符串,然后做为窗体的隐藏属性送到客户端。当客户端把页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值。当然这些全部是由ASP.NET负责的.
ViewState是页面级的,不能夸页面。
我们大家一起来个View state的原理图:

下面举个例子一个TextBox和Label的服务控件使用ViewState的区别。
我给这两个控件一个初始值,让它们实现自增效果,从1开始。。代码如下:
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { //给两个控件一个初始值 this.Label1.Text ="1"; this.Textbox1.Text = "1"; } } //label自增按钮 protected void Button1_Click(object sender, EventArgs e) { int labNum = Convert.ToInt32(Label1.Text); labNum++; Label1.Text = labNum.ToString(); } //textbox自增按钮 protected void Button2_Click(object sender, EventArgs e) { int txtNum = Convert.ToInt32(Textbox1.Text); txtNum++; Textbox1.Text = txtNum.ToString(); } }
我分别给它们自增到3,

大家一起来看看HTML代码:
<body> <form method="post" action="Default.aspx" id="form1"> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTA5NTQxNTQ2MQ9kFgICAw9kFgICAQ8PFgIeBFRleHQFATNkZGQqRxduw0hC4GvzoslavchpURXGzzGcLaEo4EP+x+Irww==" /> </div> <div class="aspNetHidden"> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBAK4oIMuAoznisYGAozSsusGArursYYIpmReKswj5pGVmWNUMMSMDhFZEGWMxdIKTRb04ISEk/U=" /> </div> <div> <span id="Label1">3</span> <input type="submit" name="Button1" value="lab增长" id="Button1" /> <br /> <input name="Textbox1" type="text" value="3" id="Textbox1" /> <input type="submit" name="Button2" value="txt增长" id="Button2" />
大家可以清楚看到label控件生成HTML代码是: <span id="Label1">3</span>是这样。
textbox生成HTML代码是: <input name="Textbox1" type="text" value="3" id="Textbox1" />是这样。
这都是ViewState默认为“true”的结果,那大家想想,如果我在页面使用了EnableViewState="false"大家想想结果
当我再次分别点自增按钮的时候,textbox继续增长下去,而Label控件就报错了,这说明什么。。
大家都会说我禁用了ViewState,那为什么textbox还会增长,这里可以说明,ViewState机制对TextBox控件无效。
同时
Checkbox
Checkbox List
RadioButtonList
上面控件的状态通过IPostBackEventHandler 和 IPostBackDataHandler接口处理,而不是ViewState的机制,所以EnableViewState也没有效果。
这是我们的理解,希望对大家有帮助,也欢迎大家多提出你宝贵的意见,谢谢。

浙公网安备 33010602011771号