posts - 50, comments - 140, trackbacks - 8, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

接口IStateManager的使用心得

Posted on 2007-05-31 10:42 faib 阅读(393) 评论(3)  编辑 收藏 网摘 所属分类: C#Asp.Net控件

在WebControls设计中,我们使用IStateManager来保存类的成员状态。

IStateManager的原理是:使用LoadViewState从StateBag中提取对象,使用SaveViewState将对象保存到StateBag中,实现IStateManage接口提供的这两个方法来一层一层的Load和Save,最终还是执行基类Control中对应的方法。

        protected override void LoadViewState(object savedState)
        
{
            
if (savedState != null)
            
{
                
object[] obj = (object[]) savedState;
                
//从数组中提取各个成员
                this.Text = obj[0].ToString(); 
                
this.Value = obj[1].ToString();
                
this.ToolTip = obj[2].ToString();
            }

        }


        
protected override object SaveViewState()
        
{
            
object[] obj = new object[3];
            
//将成员保存到数组中
            obj[0= this.Text;
            obj[
1= this.Value;
            obj[
2= this.ToolTip;
            
return obj;
        }

如果保存的只有两个成员,可以使用Pair类来代替object,如果是三个,可以使用Triplet来代替object。

当然如果此类中还包括集合类型的成员,可以使集合实现IStateManage,并实现这两个接口,在以上的SaveViewState中可以这样使用:obj[1] = this.items.SaveViewState(); LoadViewState中,将obj[1]转成集合类,并循环的添加items即可。

Feedback

#1楼    回复  引用  查看    

2008-03-21 16:24 by Seattle      
SaveViewState返回的是一个object对象,而你定义的obj是一个object数组,这样可以吗?

#2楼 [楼主]   回复  引用  查看    

2008-03-28 17:35 by faib      
当然object[] 也是属于object

#3楼    回复  引用  查看    

2008-10-16 10:14 by Jillean Wong      
我觉得应该返回object[]

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接: