一个实体对象,加了[Serializable],也可以赋值给viewstate对象,一切都没问题
可是,给这个实体对象加了一个代理,一个事件以后,就抱错了,说什么什么没有序列化
后来,我做了一个实验(如下),结果报类是的错误,谢谢
Button bb = new Button();
ViewState["AA"] = bb;

解决方案 »

  1.   

    Button无法序列化,那我的问题该怎么解决呢,我的实体类为什么不能加入到viewstate?
      

  2.   

    你的实体类是可以的,但是对于 Button 这种东东,因为它没有标注可序列化,所以假使你的类包含了Button,你的类也就没法序列化了
      

  3.   

    晕了,你们都没有看懂我写的了
    我是说我的实体类加了一个普通的事件就没有办法序列化了,我的实体类里面没有button后来想到,button也是有事件的,就拿过来坐了试验,发现button序列化后报的错误和我的实体类(加了事件)报的错误很相视。
      

  4.   

    使用 NonSerializedAttribute 标记不需要序列化的属性。不过话要说回来,难道你的数据跟控件还纠结在一起吗?难道不做基本的分层吗?
      

  5.   

    Ret = new SearchConditionList();                
    ViewState["SearchCondition"] = Ret;
    Ret.OnSetCommonCondition += new SearchConditionList.SetCommonConditionEventHandler(Ret_OnSetCommonCondition);加上第三句话就出错另外,我这个实体类不是控件,是一个集合,当集合add item的时候,有一些特殊的逻辑要处理,所以使用事件最好,我就给他加了一个事件,结果就出错了
      

  6.   

    一个最简单的代码,你们试试using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;namespace WebApplication1.TestPages
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                student s = new student();
                s.MyEvent += new student.Mydelegate(s_MyEvent);
                ViewState["stu"] = s;
            }        void s_MyEvent()
            {
                throw new NotImplementedException();
            }
        }    [Serializable]
        public class student
        {
            public string Name {set;get;}        public delegate void Mydelegate();        public event Mydelegate MyEvent;
        }
    }
      

  7.   

    上面的代码,如果把s.MyEvent += new student.Mydelegate(s_MyEvent);
    去掉,那就没有问题