Asp.net 使用检索到的数据创建动态控件[Asp-Vb.Net]
我试图通过使用从查询中检索到的数据来创建多个控件,但为了防止它们在回发时消失,允许我获取并保存它们的值,我遇到的问题是,我无法在Init上创建它们,因为控件的数量、它们的ID和其他属性只有在用户选择菜单上的一个项目后才能知道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根据数据给定 控
...
下一个
它得到的唯一控件是单个文本控件(控件计数为1),就好像其他控件不存在一样
提前谢谢。当您写“控件在单击按钮时回发不可见,因为它们不是在Init上创建的”时,您的意思是说“控件在单击按钮时回发不可见,因为它们不是在Init上创建的”?如果不是,那么这可能是问题的根本原因——必须始终重新创建动态创建的控件以响应回发(参见)。还可能存在其他问题,因为Web表单中的动态控件可能会随着您的场景变得越来越复杂而带来很多挑战——这里有一篇文章在各种场景下展示了其中的许多控件(例如,如果用户可以从DropDownList
中重新选择以生成不同的动态控件集)。所有这些的规范引用都是
现在,在回发时,您需要一些方法来确定哪些控件是动态创建的,以便可以动态地重新创建它们。因此,您需要将允许您动态创建控件的任何信息存储在某个位置。由于ViewState在Page_Init中不可用,并且在使用会话时可能会引入其他问题,因此我的建议是简单地声明一个包含该状态信息的HiddenField
。在Page_Init中,您需要从Request.Form中获取HiddenField的值(因为HiddenField的值在从ViewState进行Page_Init之后才会加载),然后从那里重新创建控件
我的最后一个建议是:首先尝试使用常规的面板
,然后尝试引入更新面板
——不必一开始就让问题过于复杂