6

カスタム コントロールに次のプロパティがあります。

List<myClass> _items;
public List<myClass> Items{
    get { return _items; }
    set { _items= value; }
}

コードビハインドでは、次のようにアイテムをコレクションに追加します...

myCustomControl.items.Add(new myClass());

ただし、これらはポストバック間で保持されません。カスタム コントロールで永続化を許可する適切な方法は何ですか?

4

5 に答える 5

2

ジェネリックリストのサイズの問題を克服する1つの方法は、基本的な配列型としてViewStateに永続化することです。

protected List<string> Items 
{ 
    get 
    { 
        if (ViewState["Items"] == null)
            ViewState["Items"] = new string[0];
        return new List<string>((string[])ViewState["Items"]);
    }
    set
    {
        ViewState["Items"] = value.ToArray();
    }
}
于 2009-02-19T17:18:41.890 に答える
1

同じページのポストバック間でデータを永続化することについて話している場合は、手動でアイテムをViewStateに追加し、ロード時にそれらを取得できます。

于 2008-12-12T19:27:23.550 に答える
1

ビューステートの List<> に問題があることに同意しますが、機能します。設計上、これにはセッターがないことに注意してください。リスト オブジェクト オブジェクトへの参照が必要であり、get メソッドは必要に応じて新しいリストを作成できます。

protected List<myClass> Items
{
    get
    {
        if (ViewState["myClass"] == null)
            ViewState["myClass"] = new List<myClass>();

        return (List<myClass>)ViewState["myClass"];
    }
}
于 2009-02-15T23:35:59.023 に答える
1

それらをコントロールのビューステートに保存できます

public List<myClass> Items{
    get { return this.ViewState["itemsKey"] }
    set { this.ViewState["itemsKey"]= value; }
}
于 2008-12-19T22:12:48.167 に答える