Можно ли заполнить элементы списка в раскрывающемся списке ASP.NET из заполнителя ASP.NET? - PullRequest
2 голосов
/ 24 февраля 2010

Я создаю свой собственный пользовательский элемент управления, содержащий раскрывающийся список .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 в коде страницы, но я хотел бы избежать этого, если это возможно. Спасибо!

1 Ответ

2 голосов
/ 24 февраля 2010

Один из подходов к этому - присвоить вашему контролю атрибут [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);
      }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...