2013-03-24 92 views
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。但是因为我现在无法做到这一点,有没有办法阻止页面跳回顶部回发?

谢谢!

+0

您在标题,问题和标签中都有'UpdatePanel',但是您使用了吗? – 2013-03-24 22:41:08

+0

我想知道如何动态使用它? – 2013-03-24 22:47:34

+1

是的,但是如果用'UpdatePanel'代替'Panel1',它应该可以工作。你试过了吗?您必须将它们添加到['ContentTemplateContainer.Controls'](http://msdn.microsoft.com/zh-cn/library/system.web.ui.updatepanel.contenttemplatecontainer.aspx)。 – 2013-03-24 22:54:59

回答

3

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

​​
+0

非常感谢小费!我会放弃它! – 2013-03-24 23:00:37

+0

@viv_acious:当然你也可以在'UpdatePanel'中添加一个'Panel',该''UpdatePanel''被声明性地添加并且在面板上使用'Controls.Add'。 – 2013-03-24 23:09:30

+0

你好,我不知道我是否正确,因为它不工作。在我的.aspx页面上,我有控件。然后,在我的代码隐藏中,我将每个动态控件的代码替换为旧的Panel1。现在我的文本框清空每次有回发,我无法取消选中复选框!有任何想法吗?!非常感激! – 2013-03-25 23:41:22

2

您的代码

Panel1.Controls.Add(dynamic controls); 

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

UpdatePanel1.ContentTemplateContainer.Controls.Add(button1); 

也请务必包括您的体内这行代码回路如果要创建一个以上的控制。

希望这会有所帮助。

+0

嗨Liaqat,我已经用你的建议替换我的面板与UpdatePanel,它现在行事怪异 - 文本框在回发清除,我不能取消复选框...任何想法如何解决这个问题?非常感激! – 2013-03-25 23:44:30

+1

别担心 - 我不认为updatepanel是这里的问题!感谢你的帮助! – 2013-03-26 00:09:00