Динамические элементы управления исчезают при обратной передаче - PullRequest
0 голосов
/ 24 апреля 2019

Я создаю динамические текстовые поля при нажатии на различные переключатели.Ниже приведен пример события включения двух переключателей:

 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
        {

        }

    }

Текстовые поля и кнопка поиска отображаются по мере необходимости.Проблема сейчас в том, что когда я нажал на кнопку поиска, произошла запись, и все элементы управления исчезли.Я много читал об инициализации элементов управления в page_preinit и попробовал приведенный ниже код.

  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
        {

        }

    }

В приведенной выше функции эта строка возвращает только кнопку поиска, а не текстовые поля.Я застрял в этом вопросе.

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

T

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