1

也许这是漫长的一天,但我无法在 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 的设置器永远不会被调用,因此 new MyObject() 永远不会被持久化。

我想我只是有一个金发的时刻。有人愿意帮忙吗?

4

1 回答 1

1

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

正是出于这个原因,像 FxCop 这样的工具建议您在 Collection 属性上没有设置器——要么将设置器设为私有,要么将其完全删除。

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

于 2010-04-28T16:58:59.613 回答