我试图通过使用查询中的检索数据来创建多个控件,但是阻止它们在回发时消失,允许我获取并保留它们的值,我遇到的问题是我无法在Init上创建它们因为只有在用户选择菜单上的项目后,才能知道控件的数量,ID和其他属性。
我面临的问题
For Each c In p.Controls
...
Next
它获得的唯一控件是单个Literal控件(控件计数 1 ),就好像其他控件不存在一样。
提前谢谢。
答案 0 :(得分:0)
当你在点击按钮时写回"控制消息时,因为它们没有在Init"上创建,你的意思是说"当点击按钮时,控制在回发时消失,因为他们不是 重新 - 在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的值(因为您的HiddenField的值不会被加载到ViewState的Page_Init之后)并从那里返回到创建你的控件。
我的最终建议:首先尝试使用常规Panel
处理所有内容,然后尝试引入UpdatePanel
- 首先不需要使问题过于复杂。