1

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

我在 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放在每个控件周围。但是由于我现在无法做到这一点,有没有办法阻止页面在回发时跳到顶部?

谢谢!

4

2 回答 2

3

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

for (int j = 0; j < dt.Rows.Count; j++)
 {
  ...create dynamic controls
 }
UpdatePanel1.ContentTemplateContainer.Controls.Add(dynamic controls);
于 2013-03-24T22:56:58.090 回答
2

你的代码

Panel1.Controls.Add(dynamic controls);

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

UpdatePanel1.ContentTemplateContainer.Controls.Add(button1);

如果您要创建多个控件,请确保在for 循环的主体中包含这行代码。

希望这可以帮助。

于 2013-03-24T23:06:43.513 回答