我在aspx
中以编程方式添加控件时遇到了一些问题。在做了一些研究后,我只想确保我理解正确。
当您尝试以编程方式添加控件时,您应该在page life cycle
的某个阶段执行此操作。
您可以通过编程方式创建和添加控件的最新内容是page_load
吗?
在initialization phase
中创建控件是最佳做法吗?是因为这是在加载view state
之前的吗?
您是否必须在每个post back
上重新创建控件?或者有没有办法创建它一次并让它持久化?
如果您更改onInit
中存在的view state
阶段中的任何控件,是否会在view state
加载后自动替换?
ContentTemplateContainer.Controls.Add(...)
是否添加子控件?例如,如果您尝试添加一个填充了带有按钮的网格视图的表格,那么在单击其中一个按钮时会有partial post back
吗?如果不是,您应该如何将子控件添加到UpdatePanel
?
这就是我现在能想到的所有问题。你们给我的任何澄清都会很棒!
答案 0 :(得分:1)
假设您正在讨论webforms而不是mvc,您可以在生命周期的任何阶段添加 new 动态控件。但是,重要的是要记住,每次有回发(包括任何服务器端事件)时,您正在使用不同的页面实例而不是第一次添加动态控件的实例。因为您现在正准备响应不同的http请求。一旦你清楚地理解了这一切,其他一切开始变得更有意义。
因此,您需要向页面添加控件以响应按钮单击。您可以在按钮的单击事件中安全地执行此操作,该事件在页面生命周期的后期很晚。但现在用户做了一些事情来触发另一个帖子。此时,您正在使用与之前不同的页面类实例。如果您希望在回发完成后仍然在页面上,则必须再次将动态控件添加到页面。如果您还想将ViewState用于此控件,则必须在之前(而不是在Page_Load事件期间)执行此操作。最常见的地方是Page_Init。
我认为这涵盖了你的大多数观点。