2008-09-18 49 views
0

我有几个用户控件,比如说AB,CD。基于一些随机输入,我需要生成这些的组合。对于例如如果输入是2a3d1a2c我需要显示A中的两个,之后的三个D,再次显示一个A等。如何动态生成ASP.NET用户控件的组合?

我还需要稳定clientid以使它们正常工作。因为每个控件都使用自己的ClientID属性来收集自己的输入。对于例如用户控制A在内部生成名为this.ClientID + "$input1"的输入,并从Request[this.ClientID + "$input1"]等请求收集输入。由于可以有多个A,每个A在回发后需要具有相同的(unique) ClientID以便从请求中获得正确的输入。

+0

我对这个问题感到困惑。通过设计,回传时控件树必须与页面呈现时相同。是否有一个原因,您不能每次都在Page.Init中简单创建控件?框架生成的ClientID将是相同的。 – 2008-10-14 13:40:50

回答

0

动态地添加控件,您可以使用面板作为一个占位符,说

<asp:Panel ID="ControlPlaceholder" runat="server" /> 

然后,在服务器端,你可以像这样将对象添加到它:

int controlCount = 0; 

... 

TextBox newTextBox = TextBox(); 
newTextBox.ID = "ctl_" + controlCount++; 
ControlPlaceholder.Controls.Add(newTextBox); 

如果在Page_Load事件中添加控件并使用生成控件ID的一致方法(例如上面的简单计数),则任何视图状态或事件绑定将在回发中重新绑定到正确的对象。

+0

如果有问题,它来自通过反序列化文件生成的类的属性(我会尝试解决方案以查看它是否有帮助。 – 2008-09-18 08:35:53