ASP.net FindControl返回null

狐狸

我有这样的代码

protected void Button1_Click(object sender, EventArgs e)

{
            Table t = new Table() ;
            t.ID = "T1";
            t.Visible = true;
            MyPanel.Controls.Add(t);
}

protected void Button2_Click(object sender, EventArgs e)

{
            Table t = (Table)MyPanel.FindControl("T1");
}

我在那边有问题: Table t = (Table)MyPanel.FindControl("T1");

在变量t中,现在引用了null。我似乎应用程序不知道生成表的代码隐藏。除了在MyPanel之外,还需要在其他地方“注册”表吗?谢谢你的回答。

编辑有关该问题的更多信息

我有没有masterPage的简单页面。有一个带有数字的Gridview。此数字表示新TAble将具有多少行和单元格。当用户选择一行时,我想创建适当的表,然后单击第二个按钮,我需要从表中收集信息。我不知道OnInit或PreRender,需要多少行。这是否意味着我的问题在技术上是不可能的?

拱灯

您拥有Panel1,但是正在搜索名为MyPanel的表?

protected void Button2_Click(object sender, EventArgs e)
{
            Table t = (Table)Panel1.FindControl("T1");
}

这应该给你桌子

编辑

好的,我挖了一些旧的webForms东西来解决这个问题。

但是,如果要稍后在代码中与它进行交互,则必须在表的initialize或preInit事件上添加表。而且,您必须在每个回发上重新创建控制。

public static Control FindControlRecursive(Control root, string id)
{
    if (root.id == id)
        return root;
    foreach (Control ctrl in root.Controls)
    {
        Control FoundCtl = FindControlRecursive(ctrl, id);
       if (FoundCtl != null)
            return FoundCtl;
    }
    return null;
}

您可以像这样使用它。

table myTable = FindControlRecursive(this.Master, "T1") as Table

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章