2

我正在设计我自己的包含 .NET 下拉列表的自定义控件。我想知道是否可以用放置在占位符中的列表项填充我的下拉列表?

例如:

<asp:DropDownList ID="ddlFilter" runat="server" >
  <asp:PlaceHolder ID="ListItemPlaceholder" runat="server"/>
</asp:DropDownList>

这不起作用,因为 DropDownList 控件只允许 ListItems 作为子控件。但是,我想做类似的事情,所以当用户在页面上包含我的控件时,他们可以做这样的事情:

<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>

有什么建议或想法吗?我知道我可以通过在后面的页面代码中动态添加 ListItems 来做到这一点,但如果可能的话,我想避免这种情况。谢谢!

4

1 回答 1

2

一种方法是给你的控件一个[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);
      }
   }
于 2010-02-24T20:48:35.447 回答