J'essaie de coder une page où vous pouvez poster un commentaire sans recharger la page entière. Les commentaires sont affichés à l'aide d'un contrôle de répéteur. Le modèle ressemble à ceci: la fonction postcommentbutton_click () fonctionne simplement bien - cliquer sur "Soumettre" fera le message. Cependant, j'ai besoin de recharger complètement la page afin de voir de nouveaux commentaires - le poste que l'utilisateur vient de faire ne montrera pas jusque-là. I DataildId le répéteur de page_Load () après un chèque (! Ispostback). P> La fonction postcommentbutton_click () ressemble à ceci: p> dans mon cas , nous voyons postcommentfeedback.text rafraîchi, mais, encore une fois, pas le contenu du répéteur qui devrait avoir un autre poste. P> Qu'est-ce que cela me manque? p> p>
5 Réponses :
Vous devriez Databind dans la page_load dans A! Ispostback tel que vous êtes. Vous devez également être Databind dans votre événement de clic.
Au lieu de faire votre DataSource un mysqldatreader, demandez à votre lecteur de peupler une liaison à une liaison ou quelque chose comme ça. Gardez cela en session et faites votre databind tous les non-post-retours et cliquez sur. Lorsque votre utilisateur publie, vous pouvez l'ajouter à la liste et attendre quelque chose pour le dire de sauvegarder cela, mais il a plus de sens dans le contexte de la publication de commentaires pour enregistrer leur poste sur votre DB et refaire votre DataPull et Stompez sur votre BindingList et Re-Databindind. P>
Aussi, Peeve Personal: Je n'aime pas <% # eval ....%>. Le code de votre page est généralement un mauvais signe. Essayez d'utiliser le répéteur.ItemDataBound http://msdn.microsoft. com / fr-nous / bibliothèque / system.web.ui.webcontrols.repeater.itemdatabound.aspx p>
Il me semble que la solution rapide est de se lier à la charge de la page quel que soit le post-plan. Alternativement, vous pouvez reculer de postcommentbutton_click. P>
protected void Timer1_Tick(object sender, EventArgs e) { Repeater1.DataBind(); /*This is all I did for it to work.*/ } protected void Buttontextbox_Click(object sender, EventArgs e) { this.DataBind(); /*Leave sql connection to your database above "this.databind"*/ }
Essayez de mettre le panneau de mise à jour entre les balises et si vous l'avez déjà fait, vérifiez si la fermeture des balises DIV est appropriée p>
Je suis à peu près sûr que c'est parce que la source de données de mon répéteur est une mysqldatreader, et je ne le mettant pas à jour après que l'utilisateur a fait son poste. Ce n'est pas mis à jour car je ne fais que la base de données seulement si (! Ispostback) ... Quelle serait la bonne façon de le faire alors? Je devrais Databind sur chaque page_load (), mais j'ai besoin de Databind après avoir été posté par un commentaire.