动态控件回发更新面板

时间:2013-03-24 22:39:35

标签: asp.net dynamic user-controls updatepanel postback

我有一个动态控件页面,包括文本框,单选按钮,复选框(都绑定到面板)。

我在Page_init函数上运行我的创建控制功能。

所以我有类似的东西:

    protected void Page_Init(object sender, EventArgs e)
    {
        PopulateControls();
    }

    protected void PopulateControls()
    {
        ....
        for (int j = 0; j < dt.Rows.Count; j++)
         {
          ...create dynamic controls
         }
        Panel1.Controls.Add(dynamic controls);

    }

在回发时(例如,当我取消选中复选框时)屏幕会跳到顶部。

通常,当我不使用动态控件时,我只是在每个控件周围添加 UpdatePanel / ContentTemplate 。但由于我现在无法做到这一点,有没有办法阻止页面在回发时跳到顶部?

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以动态地向UpdatePanel添加控件。 您必须将它们添加到ContentTemplateContainer.Controls

for (int j = 0; j < dt.Rows.Count; j++)
 {
  ...create dynamic controls
 }
UpdatePanel1.ContentTemplateContainer.Controls.Add(dynamic controls);

答案 1 :(得分:2)

您的代码

Panel1.Controls.Add(dynamic controls);

表示您使用的是面板,而不是 UpdatePanel 。使用 UpdatePanel 的方式与使用Panel的方式相同,唯一的例外是您将控件添加到 ItemTemplate 而不是Panel。在Panel的情况下,它直接保存控件,因为它是一个容器,而在UpdatePanel的情况下,它包含属性或控件的 ContentTemplateContainer 。因此,您可以使用类似下面的内容而不是上面的内容。

UpdatePanel1.ContentTemplateContainer.Controls.Add(button1);

如果您要创建多个控件,请务必在 for循环的正文中包含此行代码。

希望这有帮助。