Question

J'ajoute des zones de texte (pas un nombre fixe de zones de texte) de manière dynamique à un formulaire sur une page ASP.NET. Comment puis-je lire les données de ces zones de texte?

Était-ce utile?

La solution

En supposant que vous souhaitiez accéder aux contrôles de la publication, vous recréez probablement les contrôles dynamiques exactement tels qu'ils ont été créés lors du chargement initial, puis utilisez la méthode FindControls de la page pour rechercher les contrôles. Il serait probablement utile de créer les zones de texte avec des identifiants tels que Textbox1, Textbox2, etc.

Autres conseils

Regardez Request.Params et extrayez-les à partir de là. Vous devrez bien sûr leur donner des identifiants pour pouvoir les distinguer.

Parmi toutes les applications ASP.NET avec lesquelles j'ai travaillé, .NET aime utiliser l'algorithme suivant lors de la génération de l'ID pour les contrôles serveur:

ctl00$cphBody$[ControlID]

Essayez d’utiliser cet algorithme pour accéder à vos données à partir des zones de texte générées dynamiquement.

Lorsque vous les ajoutez, vous devez leur attribuer des noms / identifiants et les utiliser pour les référencer.

Sinon, parcourez votre DOM en javascript pour le trouver dans le formulaire que vous avez créé - ils seront dans le même ordre que celui dans lequel vous les avez insérés.

Enfin, ils sont tous disponibles comme entrées / récupérations sur votre page. Vous devriez donc pouvoir les consulter tous, à condition de leur attribuer un nom différent.

-Adam

Lorsque vous créez des zones de texte de manière dynamique (sans doute en utilisant JavaScript, il en va de même pour les contrôles ASP.NET), attribuez-leur des noms dans un modèle spécifique. Celui que vous pourrez reconnaître plus tard.

Sur le serveur, dans tout gestionnaire d’événements survenant après Page_Init, vous pouvez effectuer une itération sur Request.Form , collection.

Ne soyez pas tenté d'utiliser Request.Param, car il peut être utilisé pour appliquer une falsification de requête intersite sur votre application (un attaquant pourrait attirer l'attention de l'utilisateur sur une requête GET dans laquelle votre application interpréterait de la même manière qu'elle interpréterait une requête. POST-UN, ce qui n’est généralement pas une bonne chose).

Si vous ajoutez des contrôles ASP.NET dynamiques (dans Page_Render par exemple), vous pouvez également reconstruire les contrôles et utiliser leurs propriétés.

Vous pouvez utiliser FindControl et transmettre l'ID de la zone de texte pour obtenir une instance de la zone de texte lors de la publication. La propriété Text contient les données, étant donné que nous en sommes au stade du chargement de la page ou plus tard dans le cycle. Lors de l'ajout de contrôles dynamiques, substituez la méthode CreateChildControls et ajoutez les contrôles dynamiques pour contrôler la hiérarchie à cette étape du cycle.

N'oubliez pas que dans ASP.Net, chaque publication est une nouvelle instance de votre classe. Si vous avez créé ces contrôles lors d'une publication précédente ou sur la première vue, ils ont été récupérés avec le reste de cette instance précédente. Donc, pour utiliser les contrôles dans cette nouvelle instance, vous devez les recréer. Si vous avez besoin des informations d'état chargées pour ces contrôles (y compris toute valeur entrée par l'utilisateur), vous devez également créer avant de charger le viewstate, ce qui signifie que vous le ferez pendant l'événement Init plutôt que le événement de chargement.

Pour créer des contrôles dynamiques, j'utilisais généralement un contrôle ASP.NET PlaceHolder et ajoutais les contrôles dynamiques à ce conteneur.

Je donnerais un identifiant à chaque contrôle dynamique.

Vous pouvez ensuite utiliser FindControl sur PlaceHolder pour accéder aux contrôles dynamiques.

Je dis "contrôles dynamiques". signifie les contrôles que vous ajoutez au moment de l'exécution

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top