如何动态生成ASP.NET用户控件的组合?

时间:2020-03-06 14:20:22  来源:igfitidea点击:

我有几个用户控件,比如说" A"," B"," C"和" D"。基于一些随机输入,我需要生成这些的组合。例如如果输入为2a3d1a2c,则需要显示两个A,然后显示3个D,再显示一个A,依此类推。

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

解决方案

要动态添加控件,我们可以将面板用作占位符,例如

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

然后,在服务器端,我们可以向其添加对象,如下所示:

int controlCount = 0;

...

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

如果在Page_Load事件期间向其添加控件,并使用一致的方法生成控件的ID(例如上面的简单计数),则任何viewstate或者事件绑定都将在回发时重新绑定到正确的对象。