代码之家  ›  专栏  ›  技术社区  ›  viv_acious

动态控件回发更新面板

  •  1
  • viv_acious  · 技术社区  · 11 年前

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

    我在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);
    
        }
    

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

    通常,当我不使用动态控件时,我只会 更新面板/内容模板 围绕每个控件。但既然我现在无法做到这一点,有没有办法阻止页面在回发时跳到顶部?

    谢谢

    2 回复  |  直到 11 年前
        1
  •  3
  •   Tim Schmelter    11 年前

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

    for (int j = 0; j < dt.Rows.Count; j++)
     {
      ...create dynamic controls
     }
    UpdatePanel1.ContentTemplateContainer.Controls.Add(dynamic controls);
    
        2
  •  2
  •   LiaqatG    11 年前

    您的代码

    Panel1.Controls.Add(dynamic controls);
    

    显示您正在使用 面板 而不是 更新面板 使用 更新面板 与使用Panel的方式相同,唯一的例外是将控件添加到 普通项 而不是专家组。对于Panel,它直接持有控件,因为它是一个容器,而对于UpdatePanel,它是 内容模板容器 包含属性或控件的。因此,您可以使用下面的内容,而不是上面的行。

    UpdatePanel1.ContentTemplateContainer.Controls.Add(button1);
    

    还请确保将这行代码包含在您的 for循环 如果您正在创建多个控件。

    希望这能有所帮助。