在CompositeControl中保持由viewstate支持的集合

时间:2010-04-28 16:46:51

标签: c# asp.net viewstate composite-controls

也许这是漫长的一天,但我无法在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()永远不会被持久化。

我想我只是有一个金发碧眼的时刻。有人喜欢帮忙吗?

1 个答案:

答案 0 :(得分:1)

在集合上调用Add()与调用MyObjectCollection属性上的setter不同。

正是由于这个原因,像FxCop这样的工具表明你没有set属性的setter - 要么将setter设为私有,要么完全删除它。

您可能需要实现自己的集合类型并覆盖Add和Remove方法,以便在调用它们时执行持久性代码。