ASP.NET后台动态添加一个Table控件。后面用FindControl找不到它并且没提示错误,接收新控件的新实例Table显示值为NULL。

amabin 2013-01-08 09:17:30
题目写的很清楚。代码如下。

for (int i = 1; i <= this.ListBox1.Items.Count; i++)
{
Table autoTable = new Table(); //初始化表
this.Page.Controls.Add(autoTable);
autoTable.ID = i.ToString(); //
autoTable.CssClass = "table";
Response.Write(autoTable.ID);
}

这是动态添加多个表,并且设置了ID属性,便于后边findcontrol。

for (int i = ListBox1.Items.Count; i <= ListBox1.Items.Count; i++)
{
int indexItem = this.ListBox1.Items.IndexOf(this.ListBox1.Items.FindByText(last.GetValue(5).ToString()));
Table mytable = (Table)FindControl((indexItem + 1).ToString());
TableRow rows = new TableRow();
rows.Cells.Add(tCell);
mytable.Rows.Add(rows);
Response.Write(mytable.ID);

}

这是后边找到这个控件并且赋值添加cell和rows的。但是提示未将对象引用到实例。跟踪单步之后发现。
mytable值为NULL,也就是未找到控件。但是为什么不报错呢?

还有运行之后竟然把值都加到一个表里边了。

我生成的三个表只有一个用上了。
...全文
335 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Devenver 2013-05-10
  • 打赏
  • 举报
回复
亲 何必动态生成控件呢…………
  • 打赏
  • 举报
回复
帮顶个
引用 12 楼 insus 的回复:
参考: http://www.cnblogs.com/insus/archive/2011/12/01/2270455.html http://www.cnblogs.com/insus/archive/2012/10/29/2744769.html
刚好有用到 THANK u very much
await2013 2013-01-09
  • 打赏
  • 举报
回复
帮顶
ifcontinue 2013-01-09
  • 打赏
  • 举报
回复
for (int i = ListBox1.Items.Count; i <= ListBox1.Items.Count; i++) 这个循环只会循环一次,所以你说的“mytable值为NULL,也就是未找到控件。但是为什么不报错呢?”以及“我生成的三个表只有一个用上了。 ” 是不是这个循环的问题。
amabin 2013-01-08
  • 打赏
  • 举报
回复
dalmeeme 2013-01-08
  • 打赏
  • 举报
回复
我写最简单的代码:
		for (int i = 0; i < 3; i++)
		{
			Table table = new Table();
			table.ID = i.ToString();
			this.Controls.Add(table);
		}
		for (int i = 0; i < 3; i++)
			Response.Write(this.FindControl(i.ToString()).ID + "<br/>");
没发现什么问题啊,能找到table。
amabin 2013-01-08
  • 打赏
  • 举报
回复
引用 7 楼 dalmeeme 的回复:
引用 5 楼 amabin 的回复:引用 4 楼 dalmeeme 的回复:页面回发了吗?对于动态添加的控件,回发后不重新再添加一次,会丢失很正常。 如果我动态添加和查找是在一个事件内进行的呢?比如一个button_click事件内写的? 那应该可以啊,检查FindControl的ID参数是否正确。
我QQ1014730566
amabin 2013-01-08
  • 打赏
  • 举报
回复
引用 7 楼 dalmeeme 的回复:
引用 5 楼 amabin 的回复:引用 4 楼 dalmeeme 的回复:页面回发了吗?对于动态添加的控件,回发后不重新再添加一次,会丢失很正常。 如果我动态添加和查找是在一个事件内进行的呢?比如一个button_click事件内写的? 那应该可以啊,检查FindControl的ID参数是否正确。
大哥能不能来个远程什么的。。。
dalmeeme 2013-01-08
  • 打赏
  • 举报
回复
引用 5 楼 amabin 的回复:
引用 4 楼 dalmeeme 的回复:页面回发了吗?对于动态添加的控件,回发后不重新再添加一次,会丢失很正常。 如果我动态添加和查找是在一个事件内进行的呢?比如一个button_click事件内写的?
那应该可以啊,检查FindControl的ID参数是否正确。
amabin 2013-01-08
  • 打赏
  • 举报
回复
好了,现在是直接提示报错。findcontrol返回值为NULL ,无法将对象引用到实例。
amabin 2013-01-08
  • 打赏
  • 举报
回复
引用 4 楼 dalmeeme 的回复:
页面回发了吗?对于动态添加的控件,回发后不重新再添加一次,会丢失很正常。
如果我动态添加和查找是在一个事件内进行的呢?比如一个button_click事件内写的?
dalmeeme 2013-01-08
  • 打赏
  • 举报
回复
页面回发了吗?对于动态添加的控件,回发后不重新再添加一次,会丢失很正常。
amabin 2013-01-08
  • 打赏
  • 举报
回复
引用 2 楼 boybang 的回复:
首先说下我不是来帮忙的,只是给你提点意见。ASP.NET实际开发中,对于在后台动态向前台页面输出控件以供显示,如果在你接下来的代码中需要调用新添加的控件时,runat='server'属性是必不可少的。你上面写的FindControl()方法在后台,要获取的前台控件必须拥有runat='server'属性才可以。 如有不对,仅供参考,轻喷。 ……
我不会喷你的。都是来帮忙的。不管解决没解决。 我以前有个动态添加的是Label,但是不用添加runat属性在后台就能直接findcontrol并且能改变它的属性。
boybang 2013-01-08
  • 打赏
  • 举报
回复
首先说下我不是来帮忙的,只是给你提点意见。ASP.NET实际开发中,对于在后台动态向前台页面输出控件以供显示,如果在你接下来的代码中需要调用新添加的控件时,runat='server'属性是必不可少的。你上面写的FindControl()方法在后台,要获取的前台控件必须拥有runat='server'属性才可以。 如有不对,仅供参考,轻喷。
amabin 2013-01-08
  • 打赏
  • 举报
回复
没有人帮帮忙吗?

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧