2010-09-28 6 views
0

Je suis un GridView en cours d'initialisation, zone de texte et un bouton via le code à un Webpart dans CreateChildControls()Manipulation Postback dans un Webpart dans Sharepoint

Les contrôles ci-dessus sont déclarés comme variables de classe, mais seulement plus tard initialisés.

Ensuite, j'ai donné le gestionnaire pour le clic du bouton. La fonction de gestionnaire est supposée fonctionner comme une recherche - effectuer certaines opérations sur le contenu entré dans la zone de texte, charger les résultats dans Gridview, afficher le Gridview

Lorsque je tape quelque chose dans la zone de texte et cliquez sur le bouton, le les mêmes commandes sont chargées à nouveau et le contenu saisi dans la zone de texte est perdu. J'ai essayé ViewState() et ViewState() mais en vain. La grille ne s'affiche pas parce que ma logique ignore les tentatives de liaison car une chaîne de recherche appropriée n'était pas disponible.

Mes questions: 1) Où/comment puis-je obtenir les valeurs de publication dans la zone de texte? 2) Cela aura-t-il un sens de peupler le GridView dans PreRender() ou est-ce que la gestion des événements aura lieu après PreRender()?

EDIT: Il semble que le gestionnaire d'événements ne soit pas appelé.

Dim btnClickHandler = New EventHandler(AddressOf SetSearchParameter) 
AddHandler srchBtn.Click, btnClickHandler 

est-il correct?

EDIT: J'ai refait tout le code de 0. Cela fonctionne maintenant.

+0

Le gestionnaire pour le clic de bouton est également fait à l'intérieur CreateChildControls() –

Répondre

0

vous devriez être en mesure de référencer les valeurs de contrôle dans le gestionnaire d'événements pour le bouton clic, en fonction de la façon de les construire statique/dynamique. (zone de texte) Page.FindControl ('controlname'). valeur dans votre gestionnaire d'événements pour le clic du bouton.

er ... this.findcontrol. Je fais cela à partir de la mémoire afin que la syntaxe soit désactivée.

+0

Selon http: // stackoverflow.com/questions/1648447/how-does-onload-createchildcontrols-order-change-at-postback et de nombreuses autres ressources, CreateChildControls() est appelée avant la gestion des événements Postback - ne sera-t-il pas remplacé par Page.FindControl()? ? J'ai essayé et je n'arrive toujours pas à obtenir les valeurs. –

+0

après avoir relu votre commentaire, je n'ai pas utilisé la méthode que vous utilisez pour créer votre gestionnaire d'événements. J'ai toujours créé ma méthode et lié l'événement click à cela. Voici un exemple de code d'un gestionnaire d'événements simple pour un contrôle créé dynamiquement. –

+0

Bouton submitButton = (Bouton) this.FindControl ("submit"); submitButton.Click + = new EventHandler (SubmitContactForm); et voici la méthode submitContactForm de SubmitContactForm protected void (object sender, EventArgs e) {....} dans la méthode que j'utilisé ce, dans mon cas, il était des champs de formulaire dynamiques que je connaissais étaient des étiquettes. // obtenir le nom du contrôle objet ctrl = FindControl (controlName); string controlValue = ((TextBox) ctrl) .Text; –

1

Cela me confond toujours aussi. Je référence toujours this question afin de le rendre droit (aussi le control execution lifecycle).

  1. Vous ne devriez pas avoir à gérer viewstate, qui devrait être pris en charge automatiquement par vos contrôles.

  2. Je suggère d'utiliser l'OnPreRender pour remplir votre grille. Vos contrôles devraient avoir leurs valeurs peuplées par ViewState d'ici là.

+0

J'ai référé cela avant et ne pas encore effacer. Vérifiez mon commentaire sur la réponse suivante. 1) ViewState même pour les contrôles dynamiques? 2) Je veux qu'il soit lié uniquement sur Postback - est-il correct de vérifier Page.IsPostBack dans OnPreRender? –

+0

Oui aux deux questions. Vous allez ajouter votre zone de texte et votre bouton dans CreateChildControls. Ensuite, dans OnPreRender, vous pouvez voir IsPostBack (et que votre textbox.Text a une valeur), puis ajouter votre grille/databind. –

+0

OK merci! J'utilise maintenant mon propre drapeau - changer les valeurs personnalisables provoque également une publication et certaines valeurs ne peuvent pas toujours être définies dans ces cas –

Questions connexes