2011-07-21 55 views
0

我具有被動態添加根據條件,是否顯示一個或另外兩個了LinkBut​​ton。這些按鈕也有事件。第一click_event進行燒成之後,第二click_event不觸發

首先顯示的按鈕的事件觸發,但在條件發生變化,顯示第二個按鈕,它不會觸發事件。

源代碼:

//conditions 
    bool wantToChangeBlogPost = false; 
    string textBoxOnChangeID = ""; 

    protected void displayBlogPost() 
    { 
     SomeArraylist[] arr = valuesFromDdataBase(); 
     foreach(BlogPost y in arr) 
     { 
      string contentStr = y.BlogMailingText;//"some content in mailing"; 

      //div for displaying content in webpage 
      System.Web.UI.HtmlControls.HtmlGenericControl contentDIV = new 
        System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
      contentDIV.InnerHtml = contentStr; 

      //TB for changes 
      TextBox TBcontent = new TextBox(); 
      TBcontent.Text = contentStr; 
      TBcontent.AutoPostBack = true; 
      TBcontent.TextMode = TextBoxMode.MultiLine; 
      TBcontent.Wrap = true; 
      TBcontent.ReadOnly = true; 
      TBcontent.EnableViewState = true; 


      //two different buttons for cases, whether or not want to change the text 
          //of blogPost 
      LinkButton changePost = new LinkButton(); 
      changePost.Text = "Change MailingText"; 
      LinkButton savePost = new LinkButton(); 
      savePost.Text = "Save Changes"; 


       //id 's are needed for controls 
       TBcontent.ID = "content-" + y.Id; 
       contentDIV.ID = "contentDIV-" + y.Id; 

        changePost.ID = "changePost-" + y.Id; 
        savePost.ID = "savePost-" + y.Id; 

        changePost.CommandArgument = "content-" + y.Id; 
        savePost.CommandArgument = "content-" + y.Id; 


      //Add these controls to the placeholder, which is defined in asmx: 
      //initially add only the contentDiv 
      myPlaceHolder.Controls.Add(contentDiv); 


      /////////////////////////// 
      // HERE IS THE PROBLEM: // 
      /////////////////////////// 

      //Conditions determing when to display one or another linkbutton and 
            //TBcontent 
      if (wantToChangeBlogPost == true && textBoxOnChangeID == "content-" + y.Id) 
       { 
        savePost.Click += new EventHandler(save_click); 
      //HERE IS THE PROBLEM: this event never fires :(
        contentDIV.InnerHtml = ""; 
        TBcontent.ReadOnly = false; 
        TBcontent.Visible = true; 

        // this button is displayd when someone has clicked on button 
          //'changePost' 
        myPlaceHolder.Controls.Add(savePost); 
       } 
      else 
       { 
        changePost.Click += new EventHandler(changePost_Click); 
        contentDIV.InnerHtml = contentStr;       
        TBcontent.ReadOnly = true; 
        TBcontent.Visible = false;//initially the TB is not visible 

        //initially the bool is false and 
        // this button is displayd 
        myPlaceHolder.Controls.Add(changePost); 
       } 

     } 


     //event methods for both buttons 

     //AFTER THIS METHOD COMPLETED I WANT TO DISPLAY THE ANOTHER LINKBUTTON 
          //'savePost' WITH ANOTHER EVENT 'save_click' 
     protected void changePost_Click(object sender, EventArgs e) 
     { 
      LinkButton LB = sender as LinkButton; 
      //CONDITIONS 
      textBoxOnChangeID = LB.CommandArgument; 
      wantToChangeBlogPost = true; 
      //GO TO THE DISPLAYING METHOD AGAIN 
      displayBlogPost(); 
     } 

     //THIS METHOD NEVER EVEN FIRES! WHY?????? 
     protected void save_click(object sender, EventArgs e) 
     { 
      LinkButton LB = sender as LinkButton; 
      //CONDITIONS 
      textBoxOnChangeID = ""; 
      wantToChangeBlogPost = false; 

        //some logic to send changed data to the database to upload 
            //datatable 
        uploadWithChangedDataInTextBox(); 


      //GO TO THE DISPLAYING METHOD AGAIN 
      displayBlogPost(); 
     } 
    } 
+0

一個很好的資源,以獲取有關動態控件和回發會http://forums.asp.net/t/1186195.aspx/1更深入的瞭解 –

回答

0

如果添加控件動態,那麼你必須重新創建這些在每一個崗位背部保持ID相同則只有事件wiil火

或者如果烏拉圭回合添加控件throught等客戶端的任何其它方法則u可以調用

__doPostBack(eventTarget,eventArg)並檢查ID在服務器端,然後調用函數SM相應

相關問題