如何从动态创建的TableRow C#/Asp.Net中获取信息

本文关键字:Asp Net 信息 获取 TableRow 动态 创建 | 更新日期: 2023-09-27 18:20:06

好吧,在我正在进行的项目中,我在页面上制作了一个硬编码的asp:面板,然后用填充

  1. 下拉列表
  2. asp:Table,带有asp:TableHeaderRow
  3. 添加和取消按钮

当DropDownList发生selectedIndexChanged事件时,会创建表行,然后用大约6个表单元格填充,然后在其中放置asp:Textbox。

最终,它们都被添加到表行中,然后再添加到表列集合中。

这一切都很好,但当我用foreach循环添加来自这些动态创建的TableRows的信息时,它们不在哪里,而是TableHeaderRow

此外,当我点击添加并让它通过这个过程时,我没有得到null异常,它之后只剩下标题,我所有的行都消失了。

无论如何,我觉得我只是错过了一些非常愚蠢的东西。我浏览了很多论坛、帖子和MSDN,但始终没有找到解决我问题的答案。如有任何帮助,我们将不胜感激!

如何从动态创建的TableRow C#/Asp.Net中获取信息

您需要在Page_Init而不是Page_Load中将动态行添加到表中。如果你在Page_Load中创建它,你的新行将不会添加到ViewState中,你会看到这个问题。

不幸的是,您添加它们是为了响应服务器端事件,这可能会变得棘手。您仍然需要在Page_Init中添加行,但当页面返回并在Page_Init中处于时,selectedIndexChanged事件尚未触发。在页面生命周期中还为时过早。

如果你想知道它是否向Page_Init开火,我找到的唯一方法就是检查当时的Request.Form("__EVENTTARGET")集合。它包含触发回发的控件的控件ID——在您的情况下,这将是下拉列表。触发事件的控件将在那里,但ID将被限定,即不是MyControID,而是ctl_MasterPageContentHolderID_NamingContainer_MyControlID`等-因此在查找它时必须将其考虑在内。一旦您确定该事件已触发,则可以添加行。一旦它们被添加到那里,它们就不会消失。

正如我所说,工作很难,但我过去已经成功地做到了。正是由于这个原因,动态控制通常很难使用。您可能需要考虑其他选择。无论如何,祝你好运。