我有这样的代码
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我不知道,我需要多少行。这是否意味着我的问题在技术上是不可能的?
答案 0 :(得分:1)
您有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
答案 1 :(得分:0)
执行代码OnPreRender
protected override void OnPreRender(EventArgs e)
{
Table t = new Table() ;
t.ID = "T1";
t.Visible = true;
MyPanel.Controls.Add(t);
}
答案 2 :(得分:-3)
ctl00 $ $ ContentPlaceHolder1 $ UrunlerRAjax1 rptCustomers
的ContentPlaceHolder - >用户控件 - >中继器
Repeater rptCustomers = this.Page.Master.FindControl("ContentPlaceHolder1").FindControl("UrunlerRAjax1").FindControl("rptCustomers") as Repeater;
Repeater rptCustomers = this.Page.Master.FindControl(" ContentPlaceHolder1")。FindControl(" UrunlerRAjax1")。FindControl(" rptCustomers")作为Repeater;
Repeater repeaterName = this.Page.Master.FindControl(" ContentName")。FindControl(" UsercontrolName")。FindControl(" repeaterName")作为Repeater;