4

以下を考えると

public class MyControl : CompositeControl
{
    private DropDownList myList;

    protected override void CreateChildControls()
    {
        base.CreateChildControls();

        myList = new DropDownList();
        myList.AutoPostBack = true;
        this.Controls.Add(myList);
        if (!Page.IsPostBack)
        {
            myList.DataSource = MyBLL.SomeCollectionOfItems;
            myList.DataBind();
        }
    }
}

リスト内のアイテムは適切に保持されていることがわかりましたが、別のコントロールがレンダリングされてからこのコントロールが再度レンダリングされると、最後に選択されたアイテムが保持されません。(代わりに、リストの最初の項目が常に選択されます)

最後に選択したアイテムを ViewState に自動的に保持する必要がありますか?それとも期待しすぎているのでしょうか?

4

2 に答える 2

2

これは隠れた ViewState の問題だと思います。CreateChildControls でコントロールを作成してバインドします。この場所でのみコントロールを作成する必要があります。バインディング コードをクラス ロード イベントに移動し、EnsureChildControls を使用します。

于 2010-07-30T15:51:55.670 に答える