После первого события click_event второе событие click_event не запускается - PullRequest
0 голосов
/ 21 июля 2011

У меня есть две кнопки ссылки, которые добавляются динамически в зависимости от условий, для отображения того или другого. Эти кнопки также имеют события.

Сначала отображается событие отображаемой кнопки, но когда условия меняются и отображается вторая кнопка, это событие не запускается.

исходный код:

    //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();
        }
    }

1 Ответ

0 голосов
/ 22 июля 2011

если вы добавляете элементы управления динамически, то вы должны воссоздавать их в каждом сообщении, сохраняя идентификатор, тогда только событие сработает

или если вы добавляете элементы управления любым другим методом, например, на стороне клиента, вы можете вызвать

__doPostBack(eventTarget,eventArg) и проверьте идентификатор на стороне сервера, а затем соответственно вызовите функцию sm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...