Asp.net 使用检索到的数据创建动态控件[Asp-Vb.Net]

Asp.net 使用检索到的数据创建动态控件[Asp-Vb.Net],asp.net,vb.net,webforms,dynamically-generated,Asp.net,Vb.net,Webforms,Dynamically Generated,我试图通过使用从查询中检索到的数据来创建多个控件,但为了防止它们在回发时消失,允许我获取并保存它们的值,我遇到的问题是,我无法在Init上创建它们,因为控件的数量、它们的ID和其他属性只有在用户选择菜单上的一个项目后才能知道 页面加载包含所有项目和值的菜单(取决于数据),此外,还加载了一个按钮 用户单击菜单上的项目 所选值用于使用数据集执行查询(这发生在从菜单项单击事件调用的函数中) 从查询中检索到的数据用于确定必须创建多少个控件(2、4、6等)。每个控件都有其唯一的ID,该ID根据数据给定 控

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

  • 页面加载包含所有项目和值的菜单(取决于数据),此外,还加载了一个按钮
  • 用户单击菜单上的项目
  • 所选值用于使用数据集执行查询(这发生在从菜单项单击事件调用的函数中)
  • 从查询中检索到的数据用于确定必须创建多少个控件(2、4、6等)。每个控件都有其唯一的ID,该ID根据数据给定
  • 控件被创建并放置在面板中(名为p
  • 现在控件可见并可编辑(单选按钮、文本区域)
  • 用户单击按钮将动态控件中的信息保存到数据库中
  • 我面临的问题

  • 控件在单击按钮时会在回发时消失,因为它们不是在Init上创建的
  • 在UpdatePanel上放置按钮以防止整个页面回发,会使动态控件在尝试此操作时无法访问:
  • p.控件中每个c的
    
    ...
    下一个
    
    它得到的唯一控件是单个文本控件(控件计数为1),就好像其他控件不存在一样

    提前谢谢。

    当您写“控件在单击按钮时回发不可见,因为它们不是在Init上创建的”时,您的意思是说“控件在单击按钮时回发不可见,因为它们不是在Init上创建的”?如果不是,那么这可能是问题的根本原因——必须始终重新创建动态创建的控件以响应回发(参见)。还可能存在其他问题,因为Web表单中的动态控件可能会随着您的场景变得越来越复杂而带来很多挑战——这里有一篇文章在各种场景下展示了其中的许多控件(例如,如果用户可以从
    DropDownList
    中重新选择以生成不同的动态控件集)。所有这些的规范引用都是

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

    我的最后一个建议是:首先尝试使用常规的
    面板
    ,然后尝试引入
    更新面板
    ——不必一开始就让问题过于复杂