L'actualisation d'un contrôle Repeater dans un UpdatePanel avec ASP.NET

Je suis en train de coder une page où vous pouvez poster un commentaire sans avoir à recharger la page entière. Les commentaires sont affichés à l'aide d'un contrôle Repeater. Le modèle ressemble à ceci:

    <asp:UpdatePanel runat="server" ID="commentsUpdatePanel" UpdateMode="Conditional">
<ContentTemplate>
<!-- Comments block -->
<div class="wrapper bloc content">
<h3><img src="img/comments.png" alt="Comments" />&nbsp;Comments</h3>                                     
<p><asp:Label ID="viewImageNoComments" runat="server" /></p>
<asp:Repeater ID="viewImageCommentsRepeater" runat="server">
<HeaderTemplate>
<div class="float_box marge wrapper comments">
</HeaderTemplate>
<ItemTemplate>
<div class="grid_25">
<span class="user"><%#Eval("username")%></span><br />
<span style="font-size:x-small; color:#666"><%#Eval("datetime") %></span>
</div>
<div class="grid_75">
<p align="justify"><%#Eval("com_text") %></p>
</div>
</ItemTemplate>
<FooterTemplate>
</div>
</FooterTemplate>
</asp:Repeater>
</div>
<!-- Post comment block -->
<div class="wrapper bloc content">
<h3><a id="post_comment" name="post_comment"><img src="img/comment_edit.png" alt="Comments" /></a>&nbsp;Post 
a comment</h3>
<p class="description">Please be polite.</p>
<p>
<asp:Label ID="postCommentFeedback" runat="server" />
</p>
<table border="0">
<tr>
<td valign="top">
<asp:TextBox id="postCommentContent" runat="server" TextMode="MultiLine" 
MaxLength="600" Columns="50" Rows="15" Width="400px" />
</td>
<td valign="top">
<span style="font-size:x-small">BBCode is enabled. Usage :<br />
<b>bold</b> : [b]bold[/b]<br />
<i>italic</i> : [i]italic[/i]<br />
<span class="style1">underline</span> : [u]underline[/u]<br />
Link : [url=http://...]Link name[/url]<br />
Quote : [quote=username]blah blah blah[/quote]</span>
</td>
</tr>
<tr>
<td colspan="2">
<asp:Button ID="postCommentButton" runat="server" Text="Submit" 
onclick="postCommentButton_Click" />    
</td>
</tr>
</table>
</div>
</ContentTemplate>
</asp:UpdatePanel>

La postCommentButton_Click() fonctionne très bien - en cliquant sur "Soumettre" vous permettra de la poste. Cependant, j'ai besoin de recharger complètement la page pour voir les nouveaux commentaires - poste de l'utilisateur ne sera pas montrer jusqu'alors. Je Databind la Répétition dans le Page_Load() après une (!isPostBack) vérifier.

La postCommentButton_Click() la fonction ressemble à ceci:

protected void postCommentButton_Click(object sender, EventArgs e)
{
//We check if user is authenticated
if (User.Identity.IsAuthenticated)
{
//Attempt to run query
if (Wb.Posts.DoPost(postCommentContent.Text, Request.QueryString["imageid"].ToString(), User.Identity.Name, Request.UserHostAddress))
{
postCommentFeedback.Text = "Your post was sucessful.";
postCommentContent.Text = "";
}
else
{
postCommentFeedback.Text = "There was a problem with your post.<br />";
}
}
//CAPTCHA handling if user is not authenticated
else
{
//CAPTCHA
}
}

Dans mon cas, nous ne voyons postCommentFeedback.Texte actualisé, mais, encore une fois, pas le contenu de la répétition qui devrait avoir un poste plus.

Qu'est-ce que je suis absent?

  • Je suis assez sûr que c'est parce que la source de données de mon Répéteur est un MySqlDataReader, et je n'ai pas la mettre à jour après que l'utilisateur a fait son post. Il n'est pas mis à jour car je ne l'databind seulement si(!IsPostBack)... Ce serait la bonne façon de le faire alors? Je devrais DataBind sur chaque Page_Load(), mais j'ai besoin de DataBind après un commentaire a été posté.
InformationsquelleAutor Astaar | 2009-07-14