2011-04-22 2 views
1

Existe-t-il un moyen, autre que la création d'une classe personnalisée ControlBuilder, d'empêcher l'ajout de contrôles serveur en tant qu'enfants dans un contrôle ASP.NET personnalisé?Empêcher les autres contrôles serveur en tant qu'enfants d'un contrôle ASP.NET personnalisé

Par exemple, disons que je construis ma propre Panel contrôle:

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

Je veux empêcher les utilisateurs d'ajouter des contrôles côté serveur à l'intérieur du SpecialPanel:

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

Toutes les suggestions?

Répondre

1

Vous pouvez remplacer la méthode 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"); 
     } 
    } 
} 

Ressources connexes:

+0

Excellente réponse. Beaucoup plus simple que de construire un générateur de contrôle personnalisé! –

Questions connexes