实现 IStateManager 接口的服务器控件在设定属性时的注意点

设定属性后,要添加一句
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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值