动态控件在回发后消失

时间:2019-04-24 10:23:26

标签: c# asp.net webforms postback dynamic-controls

单击一组不同的单选按钮时,我正在创建动态文本框。下面是两个单选按钮onclick事件的示例。

 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
        {

        }

    }

在上述功能中,此行仅返回搜索按钮,而不返回texbox。我陷入了这个问题。

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

T

0 个答案:

没有答案