利用ViewState保存Html控件状态

经常客户端html控件在刷新的时候被冲掉,非常郁闷~
查查MSDN找到了解决方法。哈哈
本着分享的原则。贴出来给大家看看~~防止重复我这样的劳动~不过要给点劳务费记得 ^_^!!

说到ViewState,我们不得不知道它的工作原理。
在这我做简要介绍:

ViewState是System.Web.UI.Control类实现的一个属性,这个属性的类型是System.Web.UI.StateBag,这个类就包含了ViewState数据结构的实现,实际上它的内部也就是个Hash表,通过Key值来保存和检索数据。  
      那么服务器控件是怎么实现保存状态的呢?  
      我们知道,所有的服务器控件都是从System.Web.UI.Control派生的,所以都拥有ViewState这个属性,在Control内部,定义了两个Protected的虚拟方法:   
   protected   virtual   object   SaveViewState()  
   protected   virtual   void   LoadViewState(object   savedState)  

接下来我们就重写这两个方法。

ContractedBlock.gif ExpandedBlockStart.gif Aspx页面前端代码
None.gif<textarea id="Editor" name="Editor"><%=ViewState["EditorValue"%></textarea>


ContractedBlock.gif ExpandedBlockStart.gif Aspx页面后台代码
 1None.gif    protected override object SaveViewState()
 2ExpandedBlockStart.gifContractedBlock.gif    dot.gif{
 3InBlock.gif        object baseState = base.SaveViewState();
 4InBlock.gif        object[] totalState = new object[2];
 5InBlock.gif        totalState[0= baseState;//记得保存父控件的ViewState   
 6InBlock.gif        totalState[1= Request.Form["Editor"];//这里保存我们自己的  
 7InBlock.gif        return totalState;//返回重新包装后的保存对象
 8InBlock.gif
 9InBlock.gif
10ExpandedBlockEnd.gif    }

11None.gif
12None.gif    //这里的savedState就是我们Save的时候return   的object数组
13None.gif    protected override void LoadViewState(object savedState)        
14ExpandedBlockStart.gifContractedBlock.gif    dot.gif{
15InBlock.gif        object[] totalState = null;
16InBlock.gif        if (savedState != null)
17ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
18InBlock.gif            totalState = (object[])savedState;
19InBlock.gif            if (totalState.Length != 2)
20ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
21InBlock.gif                throw new Exception("Unknown Exception :)");
22InBlock.gif                // Throw an appropriate exception.
23ExpandedSubBlockEnd.gif            }

24InBlock.gif            // Load base state.
25InBlock.gif            base.LoadViewState(totalState[0]);
26InBlock.gif            // Load extra information specific to this control.
27InBlock.gif            if (totalState != null && totalState[1!= null)
28ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
29InBlock.gif                Value = (string)totalState[1];
30ExpandedSubBlockEnd.gif            }

31ExpandedSubBlockEnd.gif        }

32InBlock.gif
33ExpandedBlockEnd.gif    }
   
34None.gif
35None.gif    public string Value
36ExpandedBlockStart.gifContractedBlock.gif    dot.gif{
37InBlock.gif        get
38ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
39InBlock.gif            return (string)ViewState["EditorValue"];
40ExpandedSubBlockEnd.gif        }

41InBlock.gif        set
42ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
43InBlock.gif
44InBlock.gif            ViewState["EditorValue"= value;
45ExpandedSubBlockEnd.gif        }

46ExpandedBlockEnd.gif    }

转载于:https://www.cnblogs.com/Randy0528/archive/2007/01/07/614368.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值