ASP.NET プレースホルダーから ASP.NET ドロップダウン リストにリスト項目を入力できますか?
-
22-09-2019 - |
質問
.NET ドロップダウンリストを含む独自のカスタム コントロールを設計しています。私が疑問に思っているのは、プレースホルダーに配置されたリスト項目をドロップダウンリストに入力できるかどうかです。
例えば:
<asp:DropDownList ID="ddlFilter" runat="server" >
<asp:PlaceHolder ID="ListItemPlaceholder" runat="server"/>
</asp:DropDownList>
DropDownList コントロールでは子コントロールとして ListItem のみが許可されているため、これは機能しません。ただし、これと似たようなことをしたいので、ユーザーがページに私のコントロールを含めたときに次のようなことができるようになります。
<mytag:MyControl Mode="DropDown" runat="server">
<ListItemTemplate>
<asp:ListItem Text="C" Value="c"></asp:ListItem>
<asp:ListItem Text="E" Value="e"></asp:ListItem>
<asp:ListItem Text="B" Value="b"></asp:ListItem>
</ListItemTemplate>
</myTag:MyControl>
何か提案やアイデアはありますか?ページのコードビハインドに ListItem を動的に追加することでこれを実行できることはわかっていますが、可能であればそれを避けたいと考えています。ありがとう!
解決
これに対する 1 つのアプローチは、コントロールに [ParseChildren(true, "ListItemTemplate")]
属性。
「」というプロパティがあったとします。ListItemTemplate
"、これは配列でした ListItems
, の場合、マークアップはそのプロパティに解析されます。コントロールの実行時に、そのプロパティの内容をドロップダウンリストに渡すだけで済みます。
テストされていないサンプルコード:
[ParseChildren(true, "ListItemTemplate")]
public class MyControl: Control
{
private ArrayList employees = new ArrayList();
private DropDownList myDropDownList = new DropDownList();
public ArrayList ListItemTemplate
{
get
{
return employees;
}
}
protected override void CreateChildControls()
{
myDropDownList.Items.AddRange(ListItemTemplate):
Controls.Add(myDropDownList);
}
}
所属していません StackOverflow