其他分享
首页 > 其他分享> > 对.net中的ViewState的理解

对.net中的ViewState的理解

作者:互联网

TRULY Understanding ViewState这篇关于ViewState的文章讲的很好,记录一下我读完后关于ViewState的理解。

ViewState背后通过StateBag实现,StateBag类似HashTable功能,通过简直对记录控件属性。所不同的是,StateBag有记录属性是否被修改过的功能:被修改的属性被标记为Dirty

对控件属性的修改,在TrackViewState调用前,不会被标记为Dirty,而在TrackViewState调用后,会被标记。而TrackViewState的调用是在页面的OnInit阶段,从子控件,一直到顶层的Page层层调用的。而这意味着,我们即使在Page的OnInit中初始化了控件的值,该值也会被ViewState Track

ViewState在前台体现为一个Base编码的字符串,该字符串的内容,来源于被标记为Dirty的控件属性值的序列化结果。

在PostBack操作中,ViewState被回传,而页面控件被修改的值,是在OnInit后、OnLoad前被加载的,这意味着:

另外,如果不希望控件的值被存入ViewState,可以设置EnableViewState为false,这不会影响PostBack操作中用户设置的值回传。

文章提到了几个常见的错误和更好的实践方式。

  1. 对于一些易于获取的轻量操作,比如初始化省市这样的下拉框,可以
  1. 当开发控件时,默认值不应该在OnLoad中,那样会覆盖预设值;正确的做法是,直接通过StateBag中是否存在Key来判断是否需要使用默认值
  2. 当空间被加入页面时,所有的页面事件也会依次在控件中触发(init, load, render等等),因此控件属性的初始值如果不想被记录在ViewState中,可以在控件加入也面前,设置属性值

标签:ViewState,控件,属性,初始化,理解,net,OnInit,页面
来源: https://www.cnblogs.com/mosakashaka/p/12608830.html