设定属性后,要添加一句
ViewState.SetItemDirty() 的调用,这样在后续的阶段,StateBag.SaveViewState() 方法被调用时,才会保存该属性的值。
例子如下:
public virtual ImageAlign RightImageAlign

{
get

{
object o = ViewState["ItemRightImageAlign"];
if (o == null)
return ImageAlign.NotSet;
else
return (ImageAlign) o;
}
set

{
ViewState["ItemRightImageAlign"] = value;
ViewState.SetItemDirty("ItemRightImageAlign", true);
}
}
通过 Reflector 看到 System.Web.UI.StateBag 类的
SaveViewState() 方法的代码如下,可以验证这一点:
internal object SaveViewState()


{
ArrayList list1 = null;
ArrayList list2 = null;
if (this.bag.Count != 0)

{
IDictionaryEnumerator enumerator1 = this.bag.GetEnumerator();
while (enumerator1.MoveNext())

{
StateItem item1 = (StateItem) enumerator1.Value;
if (item1.IsDirty)

{
if (list1 == null)

{
list1 = new ArrayList(5);
list2 = new ArrayList(5);
}
list1.Add(enumerator1.Key);
list2.Add(item1.Value);
}
}
if (list1 != null)

{
return new Pair(list1, list2);
}
}
return null;
}

ViewState.SetItemDirty() 的调用,这样在后续的阶段,StateBag.SaveViewState() 方法被调用时,才会保存该属性的值。
例子如下:






















通过 Reflector 看到 System.Web.UI.StateBag 类的
SaveViewState() 方法的代码如下,可以验证这一点:









































