在你自己开发的服务器控件中,其子控件的属性是不需要VIEWSTATE的,
你自己定义的属性就可能需要VIEWSTATE不一定一般不用,除非你要激发当你自己定义的控件的属性改变时的事件,

解决方案 »

  1.   

    注意ViewState跟IPostBackDataHandler是两个概念
    当页面post back时,首先会调用LoadViewState加载视图状态,然后再调用LoadPostBackData加载PostBack信息(只有实现了IPostBackDataHander接口的控件才会加载其PostBack信息)
    比如TextBox的Text就是用LoadPostBackData获取的,所以你把TextBox的EnableViewState设为false,其也可以正常运作。
    而dropdownlist的items是靠ViewState来保存的,而其ItemIndex(记得不清楚是不是这样拼)应该就是用PostBack来实现得,这个没有仔细研究,只是估计在你自己开发得服务器控件中,只有需要保存修改得属性才需要ViewState,因为ViewState是在服务器跟客户端之间来回传送得,所以没必要用就不要用。
      

  2.   

    需要拿到服务器上处理的状态或者数据就应改保存在ViewState里面,这个对象是一个页面对象,他的生命周期依赖页面。并且该对象只能放可串行化的对象。实现IPostBackDataHander接口是为了支持数据回发机制,利用viewState来实现事件处理机制!其中方法的具体意义请参看:
    http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemWebUIIPostBackDataHandlerClassTopic.asp?frame=true