Comment générer de manière dynamique une combinaison de contrôles utilisateur ASP.NET?
-
01-07-2019 - |
Question
J'ai plusieurs contrôles utilisateur, disons A
, B
, C
et D
. Basé sur une entrée aléatoire, je dois générer une combinaison de ceux-ci. Par exemple si l'entrée est 2a3d1a2c
, je dois montrer deux des A, puis les 3 D après cela, un A de nouveau, etc.
Je devrai également stabiliser les identifiants pour qu'ils fonctionnent correctement. Parce que chacun de ces contrôles utilise sa propre propriété ClientID
pour rassembler les entrées sur eux-mêmes. Par exemple contrôle utilisateur A génère en interne une entrée nommée this.ClientID + "$ input1"
et collecte son entrée à partir d'une requête comme Request [this.ClientID + "$ input1"]
. Puisqu'il peut y avoir plus d'un A, chaque A doit avoir le même (unique) ClientID
après publication pour pouvoir obtenir les entrées correctes de la requête.
La solution
Pour ajouter des contrôles de manière dynamique, vous pouvez utiliser un panneau comme espace réservé, par exemple,
.<asp:Panel ID="ControlPlaceholder" runat="server" />
Ensuite, vous pouvez ajouter des objets côté serveur comme suit:
int controlCount = 0;
...
TextBox newTextBox = TextBox();
newTextBox.ID = "ctl_" + controlCount++;
ControlPlaceholder.Controls.Add(newTextBox);
Si vous y ajoutez les contrôles au cours de votre événement Page_Load et utilisez une méthode cohérente pour générer les ID des contrôles (tels que le compte simple ci-dessus), toute liaison Viewstate ou événement sera reliée à l'objet de droite sur une publication.