【问题标题】:Create Dynamic Controls using retrieved data [Asp - Vb .Net]使用检索到的数据创建动态控件 [Asp - Vb .Net]
【发布时间】:2014-07-14 04:01:56
【问题描述】:

我试图通过使用从查询中检索到的数据来创建多个控件,但防止它们在回发时消失,允许我获取和维护它们的值,我遇到的问题是我无法在 Init 上创建它们,因为数字控件的数量、它们的 ID 和其他属性只有在用户选择菜单上的项目后才能知道。

  1. 页面加载菜单及其所有项目和值(取决于数据),此外,还加载了一个按钮
  2. 用户单击菜单上的项目。
  3. 选定的值用于通过使用数据集执行查询(这发生在从 Menu_ItemClick 事件调用的函数内部)。
  4. 从查询中检索到的数据用于确定必须创建多少控件(2、4、6 等)。每个控件都有其唯一的 ID,根据数据给出。
  5. 创建控件并将其放入面板(名为 p)。
  6. 现在控件可见并可编辑(RadioButtons、TextAreas)
  7. 用户单击按钮将动态控件中的信息保存到数据库中

我面临的问题

  1. 当单击按钮时,控件在回发时消失,因为它们不是在 Init 上创建的。
  2. 在 UpdatePanel 上放置按钮以防止整个页面回发,使动态控件在尝试此操作时无法访问:
For Each c In p.Controls
...
Next

它获得的唯一控件是单个 Literal 控件(控件计数为 1),就好像其他控件不存在一样。

提前谢谢你。

【问题讨论】:

    标签: asp.net vb.net webforms dynamically-generated


    【解决方案1】:

    当您写“控件在单击按钮时回发时消失,因为它们不是在 Init 上创建的”时,您的意思是说“控件在单击按钮时在回发时消失,因为它们不是 重新-在初始化时创建”?如果不是,那么这可能是您的问题的根本原因 - 必须始终重新创建动态创建的控件以响应 PostBack(参见 ASP.NET dynamically created controls and Postback)。可能还有其他问题,因为 Web 窗体中的动态控件可能会随着您的场景越来越多地参与而带来很多挑战 - 这是一篇文章,其中在各种场景下列出了其中的许多 http://www.singingeels.com/Articles/Dynamically_Created_Controls_in_ASPNET.aspx(例如,如果用户可以重新- 从DropDownList 中选择以生成一组不同的动态控件)。所有这一切的规范参考是http://msdn.microsoft.com/en-us/library/ms178472.aspx

    现在,在 PostBack 上,您需要某种方法来确定哪些控件是动态创建的,以便可以动态地重新创建它们。因此,您需要将允许您动态创建控件的任何信息存储在某处。由于 ViewState 在 Page_Init 中不可用,并且在使用会话时可能会引入其他问题,我的建议是简单地声明一个包含该状态信息的 HiddenField。在 Page_Init 中,您需要从 Request.Form 中获取 HiddenField 的值(因为在从 ViewState 的 Page_Init 之后才会加载 HiddenField 的值)并从那里重新创建您的控件。

    我的最终建议:首先尝试使用常规的Panel,然后尝试引入UpdatePanel - 一开始不需要过度复杂化问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多