ASP.NET控件从动态构建的用户控件

时间:2017-04-17 14:56:02

标签: asp.net vb.net user-controls dynamically-generated

我对ASP.NET用户控件有一个奇怪的问题,它是在VB.NET中动态创建的。对不起,这是一个很长的帖子,但我认为我最好仔细解释一下我在做什么以及问题是什么。

实质上,用户控件是一个HTML表,用于显示来自后端SQL Server DB的数据。它使用存储过程返回一个DataTable,从中构建html行和列,其值存储在相关表格单元格的InnerHtml属性中。这只是数据的被动显示,完美运行。

但是,用户控件还具有插入由ASP按钮触发的新记录的功能。这会导致以下事件序列;

  1. 发表回
  2. user-control_Init 事件会重建表格中的所有现有行,并按上述说明插入其值。
  3. page_Init 事件。
  4. page_Load 事件。
  5. user-control_Load 事件。
  6. button_Click 事件然后构建一个与主表具有相同结构的新行。但是这次它会在每个表格单元格中插入一个相关的ASP.NET控件,例如文本框或复选框,并保存“null”值。每个控件的ID都明确设置为唯一值。最后,“插入标志”设置为true。
  7. 然后,用户将数据输入这些控件并单击“插入 - 保存”按钮。这导致另一个回发,其遵循上述过程,除了“插入标志”告诉user-control_Init事件(2)重建插入行。然后,在page_Load事件(4)之前,用户先前输入的值将从ViewState的ASP.NET控件中恢复。最后,Insert-Save_Click事件调用存储过程将这些数据保存到DB。

    当html表中存在现有行时,所有这些都能很好地工作。但是 - 并且这是奇怪的行为 - 当没有现有行时它会失败。第一个post-back成功完成,但很明显,事件2跳过重建现有行,因为没有。但是,插入行正确重建,然后用户可以将数据输入ASP.NET控件。在第二次回发(插入 - 保存)期间,上述前三个事件完美地工作。但是,当代码命中page_Load事件(4)时,所有ASP.NET控件都会消失。 html行和单元格仍然存在,包括每个单元格中的文字控件(索引0)。在此阶段不会抛出任何错误,但是当Insert-Save_Click事件发生并且应该从ASP.NET控件中读取数据时 - 它们不可用并且"索引越界"抛出错误,因为ASP.NET控件应该在它们的单元格中都有一个索引。

    我花了几个小时(几天!)调试这个,我看不出是什么导致这些控件蒸发了!任何聪明的程序员都有任何想法吗?

0 个答案:

没有答案