2008-09-18 7 views
0

J'ai plusieurs contrôles utilisateur, disons A, B, C et D. Basé sur une entrée aléatoire, j'ai besoin de générer une combinaison de ceux-ci. Par exemple si l'entrée est 2a3d1a2c je dois montrer deux des A, 3 D après cela, un A encore, etc.Comment générer dynamiquement une combinaison de contrôles utilisateur ASP.NET?

Je devrai également stabiliser les clientid pour qu'ils fonctionnent correctement. Parce que chacun de ces contrôles utilise sa propre propriété ClientID pour rassembler les entrées sur lui-même. Par exemple contrôle utilisateur A génère en interne une entrée nommée this.ClientID + "$input1", et rassemble son entrée à partir de la requête comme Request[this.ClientID + "$input1"]. Comme il peut y avoir plus d'un A, chaque A doit avoir le même (unique) ClientID après la publication afin d'obtenir les entrées correctes de la demande.

+0

Je suis confus au sujet du problème. Par conception, l'arborescence de contrôle doit être la même sur PostBack que lorsque la page a été rendue. Y a-t-il une raison pour laquelle vous ne pouvez pas simplement créer les contrôles dans l'ordre dans Page.Init chaque fois? Le code client généré par le framework sera le même. –

Répondre

0

Pour ajouter dynamiquement des contrôles, vous pouvez utiliser un panneau comme un porte-lieu, dire

<asp:Panel ID="ControlPlaceholder" runat="server" /> 

Puis, du côté du serveur, vous pouvez y ajouter des objets comme ceci:

int controlCount = 0; 

... 

TextBox newTextBox = TextBox(); 
newTextBox.ID = "ctl_" + controlCount++; 
ControlPlaceholder.Controls.Add(newTextBox); 

Si vous ajoutez les contrôles à elle lors de votre événement Page_Load et utilisez une méthode cohérente de génération des ID des contrôles (comme le nombre simple ci-dessus), les liaisons viewstate ou event seront liées à l'objet correct lors d'une publication.

+0

Si c'est important, ça vient d'une propriété d'une classe qui est générée en désérialisant un fichier (: Je vais essayer votre solution pour voir si ça aide. –

Questions connexes