Dynamic controls dissapearing on postback

32 Views Asked by At

I am creating dynamic textboxes when clicking on a set of different radio button. Below is an example of two radio button onclick event.

 protected void Checkbox1_CheckedChanged(object sender, EventArgs e)
    {
        string servicename = "service1";

        if (checkbox1.Checked)
        {



            InputParameters.InputParameters aa= new InputParameters.InputParameters();

            textbox = aa.GetInputFields(servicename);


            for (int i=0;i<textbox.Count;i++)
            {
                // declare a textbox
               TextBox CPDT = new TextBox();

               CPDT.ID = servicename + i.ToString();

               CPDT.CssClass = "form-control";

               CPDT.EnableViewState = true;

               Label lblCPD=new Label();

               lblCPD.ID = "txtDynamiclbl" + servicename+ i.ToString();

               lblCPD.CssClass= "form-control-label";

               lblCPD.Text= textbox[i].ToString();

               lblCPD.EnableViewState = true;

               CPDPlaceHolder.Controls.Add(lblCPD);

               CPDPlaceHolder.Controls.Add(CPDT);

               //this.NumberOfControls++;



            }

            Button callSoap = new Button();

            callSoap.ID = "txtDynamicSearch" + servicename;

            callSoap.Text = "Search";

            callSoap.CssClass = ".btn-info";

            callSoap.CommandArgument = "test";

            callSoap.Click += new EventHandler(btnsoap);

            callSoap.EnableViewState = true;

            CPDPlaceHolder.Controls.Add(callSoap);



        }

        else
        {

        }


    }

    protected void Checkbox2_CheckedChanged(object sender, EventArgs e)
    {
        string servicename = "service2";

        if (checkbox2.Checked)
        {


            InputParameters.InputParameters aa = new InputParameters.InputParameters();

            List<String> textbox = aa.GetInputFields("test1");

            // textboxs.AddRange(textbox);

            for (int i = 0; i < textbox.Count; i++)
            {
                // declare a textbox
                TextBox CPDT = new TextBox();
                CPDT.ID = servicename + i.ToString();
                CPDT.CssClass = "form-control";

                Label lblCPD = new Label();

                lblCPD.ID = "txtDynamiclbl" + servicename + i.ToString();

                lblCPD.CssClass = "form-control-label";

                lblCPD.Text = textbox[i].ToString();


                CPDPlaceHolder.Controls.Add(lblCPD);

                CPDPlaceHolder.Controls.Add(CPDT);



            }

            Button callSoap = new Button();

            callSoap.ID = "txtDynamicSearch" + servicename;

            callSoap.Text = "Search";

            callSoap.CssClass = ".btn-info";

            callSoap.CommandArgument = "test1";

            callSoap.Click += new EventHandler(btnsoap);

            callSoap.EnableViewState = true;

            CPDPlaceHolder.Controls.Add(callSoap);

        }

        else
        {

        }

    }

The textboxes and search button appears as needed. The problem now is when i clicked on the search button a post back occur and all the controls are gone. I have been reading a lot about initialising the controls in page_preinit and i tried the code below.

  protected void Page_PreInit(object sender, EventArgs e)

    {



        List<string> keys = Request.Form.AllKeys.Where(key => key.Contains("txtDynamic")).ToList();

        int i = 1;

        try
        {
            foreach (string key in keys)
            {
                TextBox CPDT = new TextBox();

                CPDT.ID = "test" + i.ToString();

                CPDT.CssClass = "form-control";

                Label lblCPD = new Label();

                lblCPD.ID = "txtDynamiclbl" + "test" + i.ToString();

                lblCPD.CssClass = "form-control-label";

                lblCPD.Text = textbox[i].ToString();


                CPDPlaceHolder.Controls.Add(lblCPD);

                CPDPlaceHolder.Controls.Add(CPDT);

                i++;

            }
        }

        catch
        {

        }

    }

In the above function this line only returns the search button and not the texboxes. I am stuck on this issue.

List<string> keys = Request.Form.AllKeys.Where(key => key.Contains("txtDynamic")).ToList();

T

0

There are 0 best solutions below