由于业务需求,想把Label对象 放入到ViewState中,可是由于
System.Web.UI.WebControls.Label”未标记为可序列化。
经查决定用新建服务器控件的方式来实现。
由于我只是想添加可序列化
Code
建完编译后一切正常,完全和Label一样。
可是当使用控件时
MyLabel newLabel = new MyLabel();
ViewState["test"] = newLabel;
可是编译时居然把新建的控件错认为是“System.Web.UI.WebControls.Label”
程序集“System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中的类型“System.Web.UI.WebControls.Label”未标记为可序列化。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Runtime.Serialization.SerializationException: 程序集“System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中的类型“System.Web.UI.WebControls.Label”未标记为可序列化。
可序列化: 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.
你的Label又不是程序集合。这是会报错的。如果你想用的话。来给你举个例子:
[Serializable]
private int id;
public int Id
{
set { id = value; }
get { return id; }
}
private string name
public string Name
{
set {name = value;}
get {return name;}
}
这个你可以设置web.config中tagMapping 节点
http://msdn.microsoft.com/en-us/library/ms164641.aspx
http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx
添加到<system.web></system.web>节点中
另外,你添加的这个控件dll应该是在项目中引用了的