在asp.net的生命周期中途重新创建子控件的最佳方法

时间:2011-09-08 13:51:31

标签: c# asp.net webforms

想象一下,我们有一个带有动态创建的复选框和日期时间选择器的网页表单页面。如果选中该复选框,则日期时间选择器在页面上,否则不是。

如果我根据CreateChildControls中的复选框状态设置动态创建日期选择器的逻辑,那么它适用于初始加载,但当有人点击复选框时,生命周期是

  • 的CreateChildControls
  • Checkbox_onClick
  • 渲染

因此,在调用OnClick事件时,已经创建了datetimepicker并将其添加到控制树中。

什么是解决这个问题的最佳方式(请记住比这里描述的更复杂的用户界面)

a)将日期时间隐藏在Checkbox_onClick中(似乎浪费了很多你可能不需要的控件,然后隐藏其中一些)

b)与上面相同但是在Render中从树中添加/删除控件(在CreateChildControl和onClick之间拆分逻辑,如果尚未添加则需要处理,如果已经存在则需要删除)

c)如果单击某个按钮,则在OnRender中清除所有子控件并重新创建它们。 (似乎效率低下)

d)其他东西

1 个答案:

答案 0 :(得分:2)

将所有事件连接起来是最简单的,将Visible设置为false也是最简单的,如果不需要控件(可见),它将不会被渲染,因此不会被创建。