1

我正在根据条件向我的页面动态添加控件。这些控件中有一个按钮,我还为单击事件附加了一个事件处理程序。现在在这个事件处理程序中,我正在尝试访问我的动态生成控制,但得到一个例外。这是我的代码:

protected void Page_Load(object sender, EventArgs e)
        {
            String Method = Request.QueryString["Method"];
            String Tag = Request.QueryString["Tag"];


            if (Method=="ADD" && Tag=="METHOD")
            {

                //6
            TableCell cell11 = new TableCell();
            cell11.Text = "NEXTLEVEL";

            TableCell cell12 = new TableCell();
            TextBox txt6 = new TextBox();
            txt6.ID = "txt6";
            cell12.Controls.Add(txt6);

            TableRow row6 = new TableRow();
            row6.Cells.Add(cell11);
            row6.Cells.Add(cell12);

            container.Rows.Add(row6);
                TableCell cell14 = new TableCell();
                Button submit = new Button();
                submit.ID = "SubmitButton";
                submit.Text = "Submit";
                submit.Click += new EventHandler(submit_Click);

                cell14.Controls.Add(submit);

                TableRow row7 = new TableRow();

                row7.Cells.Add(cell14);

                container.Rows.Add(row7);
            }

void submit_Click(object sender, EventArgs e)
        {
            ModifySessionAnalyzer msa = new ModifySessionAnalyzer();
            TextBox txt6= (TextBox)Page.FindControl("txt6") as TextBox;
            ##String message = txt6.Text;##

        }
4

2 回答 2

2
TableCell cell12 = new TableCell();
TextBox txt6 = new TextBox();
txt6.ID = "txt6";
cell12.Controls.Add(new TextBox());

这是错误的,您没有将 txt6 控件添加到单元格,而是添加了一个新的文本框...

于 2012-05-03T10:50:56.697 回答
1

动态添加的控件应该在Page_Init方法中不添加Page_Load。如果将它们添加到Page_Load其中,它们将不会被添加到控制树中,并且您会遇到问题 - 即它们不会正确参与 ViewState。

(TextBox)Page.FindControl("txt6")由于文本框不再在控制树中,因此可能会失败

这可能是您问题的根源。

进一步说明

你的代码应该是

protected void Page_Init(object sender, EventArgs e)
{
      //.. your code goes here
}

不是

protected void Page_Load(object sender, EventArgs e)
{
   //.. your code
}

这是使用的正常做法,Page_Load所以这对人们来说只是一个简单的习惯,但是当使用动态控件时,这是一个例外

当我说动态控件时 - 当您动态添加控件而不是在页面中声明它们时,它就是任何东西。寻找任何你要去的地方Controls.Add

于 2012-05-03T10:45:11.210 回答