Запретить другие серверные элементы управления в качестве дочерних элементов пользовательского элемента управления ASP.NET - PullRequest
1 голос
/ 22 апреля 2011

Есть ли способ, кроме создания пользовательского класса ControlBuilder, запретить добавление серверных элементов управления в качестве дочерних элементов в пользовательский элемент управления ASP.NET?

Например, допустим, я создаю свой собственный Panel элемент управления:

<my:SpecialPanel ID="SpecialPanel1" runat="server">
    <!-- Allow valid HTML -->
    <input id="tbEmailAddress" type="text" />
</my:SpecialPanel>

Я хочу запретить пользователям добавлять серверные элементы управления в SpecialPanel:

<my:SpecialPanel ID="SpecialPanel1" runat="server">
    <!-- WRONG - Throw an Exception -->
    <asp:TextBox ID="tbEmailAddress" runat="server" />
</my:SpecialPanel>

Есть предложения?

1 Ответ

1 голос
/ 22 апреля 2011

Можно переопределить метод Control.AddParsedSubObject :

public class SpecialPanel : Control
{
   protected override void AddParsedSubObject(Object obj) 
   {
      if (obj is Control) 
      {
         throw new InvalidOperationException(
             "The 'SpecialPanel' control cannot contain server controls");
      }
   }
}

Связанные ресурсы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...