Tôi đang cố gắng mã hóa trang mà bạn có thể đăng nhận xét mà không cần tải lại toàn bộ trang. Các bình luận được hiển thị bằng cách sử dụng điều khiển Repeater. Mẫu trông như sau:Làm mới điều khiển lặp lại trong UpdatePanel với ASP.NET
<asp:UpdatePanel runat="server" ID="commentsUpdatePanel" UpdateMode="Conditional">
<ContentTemplate>
<!-- Comments block -->
<div class="wrapper bloc content">
<h3><img src="img/comments.png" alt="Comments" /> 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> 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>
Chức năng đăng bàiButton_Click() hoạt động tốt khi nhấp vào "Gửi" sẽ tạo bài đăng. Tuy nhiên, tôi cần phải tải lại hoàn toàn trang để xem nhận xét mới - bài đăng mà người dùng vừa tạo sẽ không hiển thị cho đến lúc đó. Tôi Databind the Repeater trong Page_Load() sau khi kiểm tra (! IsPostBack).
Các postCommentButton_Click() chức năng trông như thế này:
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
}
}
Trong trường hợp của tôi, chúng tôi thấy postCommentFeedback.Text làm mới, nhưng, một lần nữa, không phải là nội dung của bộ lặp mà nên có một bài hơn.
Tôi thiếu gì?
Tôi khá chắc chắn rằng đó là vì DataSource của Repeater của tôi là một MySqlDataReader và tôi không cập nhật nó sau khi người dùng đăng bài của mình. Nó không được cập nhật bởi vì tôi chỉ sử dụng databind nếu (! IsPostBack) ... Cách nào để làm điều này đúng? Tôi nên DataBind trên mỗi Page_Load(), nhưng tôi cần phải DataBind sau khi một bình luận đã được đăng. – Astaar