关于以编程方式在aspx中添加控件的几个问题

时间:2012-06-29 19:18:50

标签: c# asp.net page-lifecycle dynamic-controls

我在aspx中以编程方式添加控件时遇到了一些问题。在做了一些研究后,我只想确保我理解正确。

当您尝试以编程方式添加控件时,您应该在page life cycle的某个阶段执行此操作。

  1. 您可以通过编程方式创建和添加控件的最新内容是page_load吗?

  2. initialization phase中创建控件是最佳做法吗?是因为这是在加载view state之前的吗?

  3. 您是否必须在每个post back上重新创建控件?或者有没有办法创建它一次并让它持久化?

  4. 如果您更改onInit中存在的view state阶段中的任何控件,是否会在view state加载后自动替换?

  5. ContentTemplateContainer.Controls.Add(...)是否添加子控件?例如,如果您尝试添加一个填充了带有按钮的网格视图的表格,那么在单击其中一个按钮时会有partial post back吗?如果不是,您应该如何将子控件添加到UpdatePanel

  6. 这就是我现在能想到的所有问题。你们给我的任何澄清都会很棒!

1 个答案:

答案 0 :(得分:1)

假设您正在讨论webforms而不是mvc,您可以在生命周期的任何阶段添加 new 动态控件。但是,重要的是要记住,每次有回发(包括任何服务器端事件)时,您正在使用不同的页面实例而不是第一次添加动态控件的实例。因为您现在正准备响应不同的http请求。一旦你清楚地理解了这一切,其他一切开始变得更有意义。

因此,您需要向页面添加控件以响应按钮单击。您可以在按钮的单击事件中安全地执行此操作,该事件在页面生命周期的后期很晚。但现在用户做了一些事情来触发另一个帖子。此时,您正在使用与之前不同的页面类实例。如果您希望在回发完成后仍然在页面上,则必须再次将动态控件添加到页面。如果您还想将ViewState用于此控件,则必须在之前(而不是在Page_Load事件期间)执行此操作。最常见的地方是Page_Init。

我认为这涵盖了你的大多数观点。