花边管理软件官方网站

对ViewState的集中管理

ViewState是页面级别的Session,如果在页面要多处使用ViewState的话
public string viewState1
{
get
{
return viewstate["key1"] as string;
}set
{
viewstate["key1"] = value;
}
}
页面就会有点零乱
这时候我们就可以重载 LoadViewState()方法 与 SaveViewState()方法对ViewState进行集中管理

恢复和加载(Restore and Load)

接下来的 LoadPageStateFromPersistenceMedium 方法, 仅仅在 PostBack 时被执行。当你要改变保存 ViewState 的方法时(使用 Session 或其他自定义的储存方法),覆盖这个方法,以及后面的 SavePageStateToPersistenceMedium 方法。注意:该方法并不真正加载 ViewState 到 page 及其子控件。

ViewState 被取回后,接着 LoadViewState 方法将 它们恢复到 page, 并递归的恢复到每一个子控件(只有 PostBack 的那些).这时,每个控件已经被恢复到了它上次执行时的状态,但用户 post 的值还没有被应用。因为这属于 ViewState. 这个方法是恢复所有在事件中创建的动态控件的最好时机。

下一个是 ProcessPostData 方法。 仅仅在 PostBack 时被执行。而且这个方法不能被覆盖,因为它是页面基类中实现的一个私有方法。这个方法最终将用户 post 的值,通过匹配控件的名称的方法,恢复到页面。这时,page 已经被完全恢复了。动态控件必须在这个方法之前被创建。这个方法同时也为稍后的 changed 事件记录控件值的改变。

然后才是 OnLoad 方法。 大部分的代码中都使用这个方法,因为这是在 page 的生命周期中,第一个所有的值都被恢复了的地方。我们可以通过检查 IsPostBack 属性来避免不必要的重设状态。同时也可以检查 IsValid 属性来进行验证。同时还可以在这里创建动态控件。所有这些控件的方法都会被执行并捕获,包括 ViewState. 但回发的值不可以。(参考dudu的页面生命周期)

保存和绘制(Save and Render)

下一个是 SaveViewState 方法。 不管是否 post back. 递归的应用到每一个子控件。ViewState 一般保存所有和 aspx 页面里不一样的属性,不管是被代码还是用户更改的。注意,由于控件的值是通过他们在控件树中的位置来保存的,所以如果在这之后添加动态控件到错误的位置, ViewState 可能会崩溃。

下面是 SavePageStateToPersistenceMedium 方法。它真正的保存 page 的 ViewState. 这个方法可覆盖。如果重写的话,注意这里由于 asp.net 的 bug, 需要手工设定一下 __VIEWSTATE,哪怕是空值。(参考dudu的页面生命周期)


posted @ 2006-02-09 13:01  花边软件,花边管理软件,服装(鞋)管理软件  Views(308)  Comments(0)    收藏  举报
花边管理软件官方网站