也许这是漫长的一天,但我无法在CompositeControl中持久保存由ASP.NET ViewState支持的集合。这是一个简化版本:
public class MyControl : CompositeControl
{
public Collection<MyObject> MyObjectCollection
{
get {
return (Collection<MyObject>)ViewState["coll"] == null ?
new Collection<MyObject>()
: (Collection<MyObject>)ViewState["coll"];
}
set { ViewState["coll"] = value; }
}
}
public partial class TestPage : System.Web.UI.Page
{
protected void btn_Click(object sender, EventArgs e)
{
myControl1.MyObjectCollection.Add(new MyObject());
}
}
当单击该按钮时,事件处理程序btn_Click执行正常,但MyObjectCollection的setter永远不会被调用,因此新的MyObject()永远不会被持久化。
我想我只是有一个金发碧眼的时刻。有人喜欢帮忙吗?
答案 0 :(得分:1)
在集合上调用Add()
与调用MyObjectCollection
属性上的setter不同。
正是由于这个原因,像FxCop这样的工具表明你没有set属性的setter - 要么将setter设为私有,要么完全删除它。
您可能需要实现自己的集合类型并覆盖Add和Remove方法,以便在调用它们时执行持久性代码。