2009-07-14 15 views
6

ile yenilemek Tüm sayfayı yeniden yüklemeden yorum gönderebileceğiniz bir sayfayı kodlarım. Yorumlar Tekrarlayıcı kontrolü kullanılarak görüntülenir. Şablon şuna benzer:Bir UpdatePanel'de bir Repeater denetimini 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" />&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> 

postCommentButton_Click() işlevi sadece çalışıyor - "Gönder" yazısı yapacak tıklayarak. Bununla birlikte, yeni yorumları görmek için sayfayı tamamen yeniden yüklemem gerekiyor - bu kullanıcının yapacağı yayın o zamana kadar gösterilmeyecek. Bir (! IsPostBack) kontrolünden sonra Page_Load() içinde tekrarlayıcıyı veriyorum.

postCommentButton_Click() fonksiyonu aşağıdaki gibidir: Benim durumumda

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 
     } 
} 

, biz, yine, bir daha yazı olmalıdır repeaterin değil içeriği postCommentFeedback.Text yenilenir görüyorum ama yok.

Bu eksik mi?

+0

benim Tekrarlayıcı DataSource bir MySqlDataReader çünkü bu kadar eminim ve kullanıcının mesajını verdikten sonra güncellemem. Güncellenmedi, çünkü veri tabanını sadece (! IsPostBack) ... Bunu yapmanın doğru yolu ne olurdu? Her Page_Load() üzerinde DataBind gerekir, ancak bir yorum gönderildikten sonra DataBind'e ihtiyacım var. – Astaar

cevap

2

DataBind'i bir IsPostBack içinde Page_Load içinde yapmalısınız. Click olayında DAİMA yapmalısınız. Bunun yerine veri kaynağı bir MySqlDataReader, yapma

protected void Page_Load(object sender, EventArgs e) 
    { 
     if(!IsPostBack) 
     { 
      this.DataBind(); 
     } 
    } 
    protected void MyButton_Click(object sender, EventArgs e) 
    { 
     //Code to do stuff here... 

     //Re DataBind 
     this.DataBind(); 
    } 
    public override void DataBind() 
    { 
     //Databinding logic here 
    } 
+0

Çözüm çalışmıyor. –

0

Okuyucu böyle bir BindingList falan doldurmak var. Bunu oturumda tutun ve geri bildiriminizi olmayan her şeyi yapın ve tıklayın. Kullanıcınız gönderdiğinde, listeye ekleyebilir ve bunu kaydetmek için bir şeyler söyleyebilmeniz için beklersiniz, ancak yorumlarını gönderme bağlamında db'nize kaydetmek ve veri çubuğunuzu yeniden oluşturmak ve verilerinizi tekrarlamak BindingList ve re-Databind.

Ayrıca, kişisel çiş: <% # Eval ....%> 'i beğenmedim. Sayfanızdaki kod genellikle kötü bir işarettir. Repeater.ItemDataBound Olayı http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx

0

Kullanmayı deneyin Hızlı düzeltme, geri yükleme işleminden bağımsız olarak sayfa yüküne bağlanmak gibi görünüyor. Alternatif olarak, postCommentButton_Click içinden yeniden girebilirsiniz.

0
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"*/ 

} 
0

etiketleri arasında ve zaten div etiketlerinin kapanış doğru olup olmadığını o zaman kontrol yapmış eğer güncelleme paneli koymayı deneyin

İlgili konular