2009-12-14 5 views
0

J'ai créé mon propre contrôle qui contient le contrôle TextBox en tant que contrôle enfant. cette zone de texte a l'autopostback activé. lorsque la publication est appelée, je ne reçois aucun texte dans request.querrystring. où devrais-je spécifier le texte entré dans texbox sera envoyé à la réponse? ou existe-t-il un moyen plus facile d'envoyer cette information? Je souhaite que le texte saisi soit à nouveau dans la zone de texte après la publication.Comment ajouter une réponse à partir de TextBox? C#

merci

Répondre

0

Pour les contrôles créés dynamiquement, vous devez les créer et les ajouter à l'arborescence de contrôle dans l'événement Page_Init(); Page_Load() est trop tard, et Page_PreRender() est trop tard.

Une fois dans l'arborescence de contrôle, l'exécution restaurera l'état du contrôle après une publication. Vous pouvez accéder au contenu du contrôle en utilisant myTextBox.Text - vous n'avez pas besoin d'utiliser Request.QueryString

Pour un contrôle qui contient uniquement un TextBox, les choses seraient beaucoup plus faciles si vous utilisiez un contrôle utilisateur plutôt qu'un INamingContainer. De cette façon, vous pouvez simplement utiliser <asp:TextBox> dans votre balisage .ascx.

+0

merci, cela a beaucoup contribué – user247458

+0

Je sais que vous êtes nouveau ici, mais il est d'usage d'upvote réponses qui sont utiles ... – RickNZ

0

Un contrôle personnalisé? Tout contrôle publié comme celui-ci charge ses données dans la méthode LoadPostData. Vous pouvez le remplacer dans votre classe de contrôle personnalisée et accéder à la valeur du contrôle via:

var text = postDataCollection [ID_table_de_script];

La zone de texte dans votre contrôle personnalisé doit avoir un ID.

Si vous parlez d'autre chose, faites-moi savoir les détails.

Merci.

+0

Salut merci pour la réponse. c'est le code raccourci de mon contrôle. Ce contrôle provoquera la publication, mais aucune réponse n'est renvoyée. peut-être que vous avez raison avec loadpostdata mais je n'ai pas cette méthode à remplacer dans mon contrôle. public class my_control: Contrôle, INamingContainer { override OnPreRender vide protégé (EventArgs e) { TextBox MyTextBox = new TextBox(); mytextbox.ID = "nom"; mytextbox.AutoPostBack = true; Controls.Add (mytextbox); } } – user247458

+0

Mes excuses. Certains contrôles implémentent cela, mais puisque vous héritez du contrôle, ajoutez l'espace de noms IPostbackDataHandler, qui ajoutera ceci pour vous, et vous permettra de traiter les données de publication. Vous devriez être capable de l'obtenir via l'ID ... mais ce serait le clientID ou uniqueID (oubliez lequel). –

0
  1. (TextBox) Control.FindControl ("id contrôle")
  2. obtenir la valeur de contrôle dynamique postback, Request.Form ("contrôle id client")
Questions connexes