PostBack与视图状态
asp.net开发中我们时常会写if (!IsPostBack)来限定第一次加载的所做的动作,但是否真正明白第一次加载和回传的别?
首先我来贴一段TextBox代码,这是我用Reflector这个工具反编译微软库得出的代码
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
从上面代码可以看得出来,Text是属性是根据视图状态值而得到的,下面的问题就是什么时候产生视图状态值?因为视
图状态值是存于客户端的,所以第一加载的时候如果你没有设定Text属性值,所以得到的就是string.Empty
当按钮进行回传时,这个时候回传就会根据视图状态值匹配
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
这是回传事件发生后装载数据的代码,看看如果TextBox不行回发过来的数据就把TextBox属性值设值为str2,也就是回
发过来的值.
所以在.net中回发机制是依赖于视图状态值来实现的,如果禁用了视图状态也就不能还原状态值,那asp.net中那些属性具有
回发还原,呵呵.当然是表单中
还有一点那什么时候用if (!IsPostBack),那些东西该写在这些语句中,写在这个语句中的应该是那些在回发过程是会改变的控件状态值,例如TextBox,DropDownList,Reapeater等这些,因为这些控件有可能在回发事件中会产生一些更改.所以回发机制并不是加速缓存,也不是那些不改的静态htm或者css第一次加载以后回发就可以加速,回发真正的机制是:
通过视图状态来还原/改变表单值.
这也是asp.net事件驱动和在同一个页面编码回发得以实现的基础.
Copy Right By Robo_zou