一个容易误解的小问题:TextBox的EnableViewState为false为什么无效
来源:互联网 发布:linux文件夹列表 编辑:程序博客网 时间:2024/05/22 02:25
Page对象的EnableViewState属性为false,意味着整个页面(包括其中的所有服务器端控件)的ViewState被禁用,但是<input type="hidden" name="__VIEWSTATE" value="...." />并不消失,这个时候ViewState是不起作用的。
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对象还是可以使用的。
关于服务器端控件对于Post回来数据的详细信息,请参考:“Control Execution Lifecycle”
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcontrolexecutionlifecycle.asp
“Processing Postback Data”
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconreceivingpostbackdatachangednotifications.asp
下面这篇文章讲述了模拟TextBox的详细实现源代码:
“Postback Data Processing Sample”
http://msdn.microsoft.com/library/en-us/cpguide/html/cpconpostbackdataprocessingsample.asp
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对象还是可以使用的。
关于服务器端控件对于Post回来数据的详细信息,请参考:“Control Execution Lifecycle”
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcontrolexecutionlifecycle.asp
“Processing Postback Data”
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconreceivingpostbackdatachangednotifications.asp
下面这篇文章讲述了模拟TextBox的详细实现源代码:
“Postback Data Processing Sample”
http://msdn.microsoft.com/library/en-us/cpguide/html/cpconpostbackdataprocessingsample.asp
- 一个容易误解的小问题:TextBox的EnableViewState为false为什么无效
- TextBox的EnableViewState属性问题
- EnableViewState=false无效
- 关于NSOperationQueue,一个容易让初学者误解的问题
- EnableViewState="false"的DataGrid分页
- python中容易误解的小问题和函数中的参数
- STL set 容易引起误解的一个地方
- 容易被误解的inline
- wpf-容易误解的Image
- snprintf容易误解的使用方法
- javascript 容易误解的地方
- Shiro容易误解的地方
- 页面EnableViewState=false遇到的麻烦与解决办法
- apache shiro RememberMe 为false的一个问题解说
- 在Oracle中建表时容易忽视的一个小问题
- Bitmap使用容易被忽略的一个小问题点
- 关于JVM一个容易被忽略的小问题
- 有关view事件传递容易忽略的一个小问题
- Cellpadding, Cellpacing and border
- 如何把纵向显示的结果变成横向显示?
- "创建控件时出错/lm/w3svc/... 不是一个有效的iis应用程序" 的解决办法
- 谈谈snprintf
- Everything can be out of control
- 一个容易误解的小问题:TextBox的EnableViewState为false为什么无效
- 通过API HOOK 创建SYSTEM用户进程
- 对与项目中的扫描效果问题的一些想法
- 单选按钮的值
- 水煮coreutils 之二 hash
- 在Visual Studio 2005中调试SQL Server 2005的存储过程
- SQL Server中删除重复数据的几个方法
- 硬盘主&扩展分区,基本&动态磁盘等概念
- 圈