捕获ASP.NET中动态创建的TextBox和DropDownList的值

时间:2016-05-05 08:15:19

标签: asp.net asp.net-3.5

我遇到了问题,尝试使用谷歌搜索,但找不到任何解决方案。

我已在Page_Load中动态创建了控件,并且我有一个静态按钮。

单击该按钮时,我需要捕获这些控件中的用户条目。

现在,当我尝试使用其唯一ID访问控件时,由于控件在运行时不可用,因此返回错误。 :(

For循环 - 启动

    if (dr["Type"].ToString().Trim() == "DropDown")
    {
        DropDownList ddl = new DropDownList();
        ddl.Id = "ddl" + Convert.ToString(Counter);
        ddl.DataTextField = "Text";
        ddl.DataValueField = "Value";
        ddl.DataSource = ds1;
        ddl.DataBind();
        ddl.EnableViewState = true;
        cell.Controls.Add(ddl);
    }
    else if (dr["QuestionType"].ToString().Trim() == "TextBox")
    {
        TextBox txt = new TextBox();
        txt.ID = "txt" + Convert.ToString(Counter);
        txt.EnableViewState = true;
        cell.Controls.Add(txt);
    }
    row.Cells.Add(cell);
    table.Rows.Add(row);

即使我在FindControl函数中执行了Btn_click,也表示该面板有0个控件。

var textbox = (TextBox)pnlMidTermFeedback.FindControl("txt5");

textbox始终为NULL,但我有一个控件txt5。当我做 F12 时,我可以看到它。

请帮忙。

1 个答案:

答案 0 :(得分:0)

必须在每次回发时重新创建动态创建的控件:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // Set values and properties of controls specified in markup
        ...
    }

    // Create new controls and add them to the panel
    ...
}

然后它们将在按钮事件处理程序中可用,并包含用户输入的数据。