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

このため、FxCop などのツールは、Collection プロパティにセッターを持たないことを提案します。セッターを非公開にするか、完全に削除します。

独自のコレクション タイプを実装し、Add メソッドと Remove メソッドをオーバーライドして、呼び出されたときに永続化コードが実行されるようにする必要がある場合があります。

于 2010-04-28T16:58:59.613 に答える