2009-07-14 8 views
6

के साथ एक अपडेटपेनल में एक पुनरावर्तक नियंत्रण को रीफ्रेश करना मैं एक पृष्ठ को कोड करने का प्रयास कर रहा हूं जहां आप पूरे पृष्ठ को पुनः लोड किए बिना कोई टिप्पणी पोस्ट कर सकते हैं। टिप्पणियां एक पुनरावर्तक नियंत्रण का उपयोग कर प्रदर्शित की जाती हैं। टेम्पलेट इस तरह दिखता है: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() फ़ंक्शन बस ठीक काम करता है - "भेजें" पोस्ट कर देगा क्लिक करें। हालांकि, मुझे नई टिप्पणियां देखने के लिए पृष्ठ को पूरी तरह से पुनः लोड करने की आवश्यकता है - तब तक जो उपयोगकर्ता बनाया गया है, वह तब तक नहीं दिखाएगा। मैं पृष्ठ (लोड करें)() isPostBack) चेक के बाद पेज_लोड() में पुनरावर्तक डेटाबेस।

postCommentButton_Click() फ़ंक्शन इस तरह दिखता है:

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

मेरे मामले में, हम देख पा रहे हैं postCommentFeedback.Text ताज़ा किया, लेकिन, फिर से, पुनरावर्तक जो एक और पोस्ट करना चाहिए था की नहीं सामग्री।

मुझे क्या याद आ रही है?

+0

मैं यकीन है कि क्योंकि मेरी पुनरावर्तक के डेटास्रोत एक MySqlDataReader है कि यह कर रहा हूँ , और उपयोगकर्ता ने अपनी पोस्ट करने के बाद इसे अपडेट नहीं किया है। यह अपडेट नहीं किया गया है क्योंकि मैं केवल डाटाबेस करता हूं (! IsPostBack) ... तब ऐसा करने का सही तरीका क्या होगा? मुझे प्रत्येक पृष्ठ_लोड() पर डेटा बाइंड करना चाहिए, फिर भी मुझे टिप्पणी के बाद डेटाबेंड की आवश्यकता है। – Astaar

उत्तर

2

आपको डेटाबैंड को पेज_लोड में एक के अंदर रखना चाहिए! IsPostBack जैसा आप हैं। आपको अपने क्लिक इवेंट में भी डाटाबेस होना चाहिए।

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

समाधान काम नहीं करता है। –

0
इसके बजाय अपने डेटा स्रोत एक MySqlDataReader, बनाने का

अपने पाठक एक BindingList या ऐसा ही कुछ पॉप्युलेट है। इसे सत्र में रखें और अपने डेटाबेस को प्रत्येक गैर-पोस्टबैक करें और क्लिक करें। जब आपका उपयोगकर्ता पोस्ट करता है, तो आप इसे सूची में जोड़ सकते हैं और इसे सहेजने के लिए कुछ कहने के लिए प्रतीक्षा कर सकते हैं, लेकिन यह पोस्ट को पोस्ट करने के संदर्भ में अधिक जानकारी देता है ताकि उनकी पोस्ट को आपके डीबी में सहेज सकें और अपने डेटापुल को फिर से शुरू कर सकें बाध्यकारी सूची और पुनः डेटाबेस।

इसके अलावा, व्यक्तिगत peeve: मैं <% नापसंद #%>। आपके पृष्ठ में कोड आमतौर पर एक बुरा संकेत है। पुनरावर्तक का उपयोग करने का प्रयास करें। इटैमडाटाबाउंड इवेंट http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx

0

यह मुझे लगता है कि त्वरित फिक्स को पोस्टबैक के बावजूद पृष्ठ लोड पर बाध्य करना है। वैकल्पिक रूप से, आप postCommentButton_Click के भीतर से पुनः प्रेषित कर सकते हैं।

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

टैग के बीच है और यदि आप पहले से ही किया है कि उसके बाद जाँच लें कि div टैग के समापन उचित है अद्यतन पैनल लगाने की कोशिश