カスタム サーバー コントロールを開発しています。以下は ASPX ページのコントロールのマークアップです。
<uc:NoteBook ID="nb1" runat="server">
<NotePages>
<uc:NotePage ID="p1" runat="server">
<asp:DropDownList ID="ddl1" runat="server"></asp:DropDownList>
</uc:NotePage>
</NotePages>
</uc:NoteBook>
このコントロールにNotePages
は、実際にはコントロールのコレクションであるプロパティがあることに注意してくださいNotePage
。また、NotePage
コントロールは任意のタイプの子を持つことができます。
同じ aspx ページのPage_Load
イベント ハンドラーで、いくつかのアイテムをDropDownList
コントロールにロードしています。
if (!this.IsPostBack)
{
this.ddl1.Items.Add(new ListItem("Class-1", "C1"));
this.ddl1.Items.Add(new ListItem("Class-2", "C2"));
this.ddl1.Items.Add(new ListItem("Class-3", "C3"));
}
問題:
問題は、ポストバックの後、DropDownList
アイテムがクリアされることです。これは、ここで状態管理が欠落していることを明確に示しています。
誰かがそれを処理する方法を教えてもらえますか?
以下は制御コードです。
public class NoteBook : CompositeControl
{
[PersistenceMode(PersistenceMode.InnerProperty)]
public virtual List<NotePage> NotePages
{
get;
set;
}
public NoteBook()
{
this.NotePages = new List<NotePage>();
}
protected override void CreateChildControls()
{
foreach (var c in this.NotePages)
{
this.Controls.Add(c);
}
base.CreateChildControls();
}
}
[ParseChildren(false)]
public class NotePage : UserControl
{
}
ありがとう。