¿Cómo crear dinámicamente cuadros de texto usando ASP.NET y luego guardar sus valores en la base de datos?

Estoy creando un sitio de encuesta. Quiero agregar dinámicamente los cuadros de texto y luego obtener sus valores en la base de datos.

Ahora digamos que selecciono 4 cuadros de texto del menú desplegable para estar allí dinámicamente.

Código en la selección en el menú desplegable:

     protected void NumDropDown_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (DropDownList1.SelectedValue == "TextBox")
        {

            int j;
            i = int.Parse(NumDropDown.SelectedValue);
            Session["i"] = i;
            switch (i)
            {
                case 1:
                    t = new TextBox[i];
                    Session["textBox"] = t;
                    for (j = 0; j < i; j++)
                    {
                        t[j] = new TextBox();
                        t[j].ID = "txtCheckbox" + j.ToString();
                        Panel1.Controls.Add(t[j]);

                    }
                    break;
                case 2:
                    t = new TextBox[i];
                    Session["textBox"] = t;
                    for (j = 0; j < i; j++)
                    {
                        t[j] = new TextBox();
                        t[j].ID = "txtCheckbox" + j.ToString();
                        Panel1.Controls.Add(t[j]);

                    }
                    break;

                case 3:
                    t = new TextBox[i];
                    Session["textBox"] = t;
                    for (j = 0; j < i; j++)
                    {
                        t[j] = new TextBox();
                        t[j].ID = "txtCheckbox" + j.ToString();
                        Panel1.Controls.Add(t[j]);

                    }
                    break;
                case 4:
                    t = new TextBox[i];
                    List<TextBox> MyTextBoxes;
                    for (j = 0; j < i; j++)
                    {
                        t[j] = new TextBox();
                        t[j].ID = "txtCheckbox" + j.ToString();
                        Panel1.Controls.Add(t[j]);
                        try
                        {
                            MyTextBoxes = (List<TextBox>)Session["AddedTextBox"];
                            MyTextBoxes.Add(t[j]);
                            Session["AddedTextBox"] = MyTextBoxes;
                        }
                        catch
                        {
                            MyTextBoxes = new List<TextBox>();
                            MyTextBoxes.Add(t[j]);
                            Session["AddedTextBox"] = MyTextBoxes;
                        }
                    }
                    break;
            }

        }
    }

2) Luego, aquí ingresé los valores en el cuadro de texto como a, b, c, d y hago clic en AGREGAR:

Código para el clic en el clic AGREGAR:

1) Primero verifiqué la sesión para estar allí en Page_Init:

    protected void Page_Init(object sender, EventArgs e)
    {
        if (Session["AddedTextBox"] != null)
        {
            string a;
            string b;
            string c;
            string d;

            int listCount = ((List<TextBox>)Session["AddedTextBox"]).Count;
            foreach (TextBox t in ((List<TextBox>)Session["AddedTextBox"]))
            {
                if (listCount == 1)
                {

                }
                if (listCount == 2)
                {

                }
                if (listCount == 3)
                {

                }
                if (listCount == 4)
                {
                    if (t.ID == "txtCheckbox0")
                    {
                        a = t.Text;
                    }
                    if (t.ID == "txtCheckbox0")
                    {
                        b = t.Text;
                    }
                    if (t.ID == "txtCheckbox0")
                    {
                        c = t.Text;
                    }
                    if (t.ID == "txtCheckbox0")
                    {
                        d = t.Text;
                    }

                }
            }
        }

Pero el problema aquí es que no obtengo los valores de texto, parecen estar vacíos. Porfavor ayudame a resolver este problema.

Respuestas a la pregunta(2)

Su respuesta a la pregunta