【问题标题】:find controls from dynamically created table从动态创建的表中查找控件
【发布时间】:2011-01-06 21:49:20
【问题描述】:

我在复选框的 selectedindexchanged 后面的代码中编写了一个函数来创建动态表, 也就是说,当用户检查 2 个复选框时,将生成带有文本框的 2 个表格,

然后点击按钮我想在数据库中插入这些文本框的值, 为此我想使用 findcontrol 查找文本框,但我找不到它,

所以我在页面加载时调用了相同的表创建函数, 但随后它显示文本框具有重复 id 的错误

请告诉我解决方案。

谢谢

【问题讨论】:

  • 能否包含代码sn-ps?听起来您要创建表两次,一次在 Page_Load 上,一次在 SelectedIndexChanged 上,导致 ID 重复。在这种情况下,您根据用户输入创建控件,您必须在 Page_Load 之前重新创建它们,以便捕获回发数据,但在用户启动的事件重新创建它们之前销毁它们。

标签: asp.net


【解决方案1】:

当您创建动态控件时,您需要在每次回发时重新创建它们。

这样做的最佳位置是在OnInit 事件处理程序中。在复选框的SelectedIndexChanged 事件处理程序中执行此操作的问题在于,在回发时它们不会被重新创建并且无法访问。

有关详细信息,请参阅this 文章,也可以阅读asp.net page life cycle

【讨论】:

  • 我试过了,但是不允许重复文本框 id 会出错,请为此提供解决方案
  • @tina - 你应该给每个表和其他动态添加的控件一个不同的 ID。
  • Ids 也是动态给出的。
  • @tina - 您确定它们对于每个控件不同,并且在整个页面(包括其他用户控件和母版页)中也不重复?
  • 是的,它们没有重复,但是当调用创建表的相同函数时,我认为表被重新创建并显示重复 id 的错误
【解决方案2】:

在页面上添加一个带有 runat="Server" 的 div 并给它一个 ID,例如 div1。 将表格添加到这个 div 但你应该总是写

div1.Controls.Clear();

首先将表格再次添加到 div。

【讨论】:

  • 您可以获取文本框的值,因为它们的值保存在 ViewState 中。
    试试看,如果它解决了您的问题,请告诉我。
  • 没关系。
    写div1.Controls.Clear(),然后div1.Controls.Add(table);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多