我随便声明一个委托
[Serializable]
public delegate int processSaveHead();
然后想这样存储在ViewState中
public processSaveHead SaveHead
{
get
{
if (ViewState["SaveHead"] == null)
{
processSaveHead temp = new processSaveHead(somenewmethiod);
ViewState["SaveHead"] = temp;
}
return (processSaveHead)ViewState["SaveHead"];
}
set
{
ViewState["SaveHead"] = value;
}
}但页面报错:must be ed as Serializable or have a TypeConverter other than ReferenceConverter to be put in viewstate。
请问如果将这个delegate存储到ViewState中,普通的实体类是可以这样存进去的。如果真能解我之惑,我还会加分!

解决方案 »

  1.   

    即使有了Serializable,并不表明系统知道怎么持久你的对象,因为delegate不是一个简单的对象,它类似function pointer。先问问你自己,你为什么要把这样的东西存在ViewState里?
      

  2.   

    估计用ViewState无法实现!为什么要保存委托啊?根据你的目的想其它办法吧!
      

  3.   

    谢谢楼上各位,确实可以不用,我想将一个委托传给一个自定义控件调用。
    如果不放在ViewState中的话,每次点击自定义控件中的按钮时,委托就会丢掉。
    我现在可以通过回发事件的方法解决,不过需要在使用自定义控件的页面加载这个事件。
    如果能放在ViewState中时,委托就不会丢掉,页面就不需要加载任何事件,这样代码看起来也美观。
    这就是我的主要意图,您们看这样可行吗?
      

  4.   

    我试过把类放到ViewState中。关于委托。 没有试过。