C# TextBox的EnableViewState为false后,为什么点击按钮PostBack,TextBox的内容还还是会保持(Persist)
展开全部
TextBox的文本内容会放置在Post到服务器的数据集合里面,然后TextBox实现了IPostBackDataHandler接口,它会在Page_Load事件之前调用IPostBackDataHandler.LoadPostData 方法来根据Post回来的Html元素的name属性与服务器端控件的UniqueID属性相匹配来更新响应TextBox.Text属性,然后,如果这个新的数据与老的Text属性不一样了,则LoadPostData返回true,这样后面的RaisePostDataChangedEvent将会被调用,这个事件最后会调用OnTextChanged方法触发TextBox.TextChanged事件,然后,最后在Render事件里面,TextBox将会将其Text属性Render出来,这样,最终显示的TextBox内容还是会保持。(注意,这里UniqueID属性非常重要,一定要在Render的时候将name属性设置为UniqueID,否则LoadPostData方法将不能够找到正确的服务器端控件匹配,具体参考最后的“Processing Postback Data”)
注意:虽然TextBox的Text属性是使用ViewState来实现的而此时ViewState被禁用,但是ViewState被禁用只是意味着LoadViewState和SaveViewState方法并不会将服务器内容中的ViewState对象内容保存在<input type="hidden" name="__VIEWSTATE" value="...." />里面,内存中的ViewState对象还是可以使用的,可以证明如下:
private void Page_Load(object sender, System.EventArgs e){this.ViewState["test"]="test";
this.Response.Write(this.ViewState["test"].ToString());}在ViewState被禁用的情况下,"test"字符串还是会被写出来的,这说明内存中的ViewState对象还是可以使用的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询