在页面生命周期中是否可以使用ViewState集合?

Wis*_*yEh 3 asp.net

究竟是视图状态从控制的.Viewstate属性访问?根据我的观察,最接近的事件是在Page.PreLoad事件上(在Page.InitComplete,Viewstate仍然不可用).

但是,对于实现IPostBackEventHandler接口的控件,调用LoadValue()方法并且.Viewstate集合可用(这发生在Page.InitComplete之后和Page.PreLoad之前).

有没有人知道可以用来了解Viewstate何时可用的任何其他事件?或者可以用来知道Viewstate是否已加载的任何技巧(不包括对私有/受保护/内部成员的反射)?

Str*_*ior 8

何时可以从控件的.Viewstate属性访问视图状态?

LoadViewState法已运行.

通常这意味着在Init阶段之后和Load和Handler之前(例如"OnClick")阶段.但ViewState非常复杂,所以我强烈建议您阅读这篇优秀文章,以真正了解ViewState.

既然你可以覆盖这个LoadViewState方法,那么这就是你提出任何一种技巧的好地方:

    protected override void LoadViewState(object savedState)
    {
        base.LoadViewState(savedState);
        this.ViewStateLoaded = true; // or you could fire an event or something
        UpdatePanelVisibility();
    }
Run Code Online (Sandbox Code Playgroud)

当然,这确实假设您使用自己的控件实现,但情况并非总是如此.