如何动态生成ASP.NET用户控件的组合?
我有几个用户控件,比如A、B、C和D。基于一些随机输入,我需要生成这些控件的组合。例如,若输入为2a3d1a2c,我需要显示两个A,之后显示3D,再次显示A,等等如何动态生成ASP.NET用户控件的组合?,asp.net,user-controls,Asp.net,User Controls,我有几个用户控件,比如A、B、C和D。基于一些随机输入,我需要生成这些控件的组合。例如,若输入为2a3d1a2c,我需要显示两个A,之后显示3D,再次显示A,等等 我还需要稳定clientid,以使其正常工作。因为每个控件都使用自己的ClientID属性来收集自己的输入。例如,对于用户控件,A在内部生成一个名为this.ClientID+$input1的输入,并从类似请求[this.ClientID+$input1]的请求中收集其输入。由于可以有多个A,每个A在回发后都需要具有相同的唯一Clie
我还需要稳定clientid,以使其正常工作。因为每个控件都使用自己的ClientID属性来收集自己的输入。例如,对于用户控件,A在内部生成一个名为this.ClientID+$input1的输入,并从类似请求[this.ClientID+$input1]的请求中收集其输入。由于可以有多个A,每个A在回发后都需要具有相同的唯一ClientID,以便从请求中获得正确的输入。要动态添加控件,可以使用面板作为占位符,例如
<asp:Panel ID="ControlPlaceholder" runat="server" />
如果在Page_Load事件期间向其添加控件,并使用一致的方法生成控件ID,如上面的简单计数,则任何viewstate或事件绑定都将在回发时重新绑定到正确的对象。如果有必要,它来自通过反序列化文件生成的类的属性:我将尝试您的解决方案,看看它是否有帮助。我对这个问题感到困惑。根据设计,回发时控件树必须与呈现页面时相同。您是否有理由每次都不能按照Page.Init中的顺序创建控件?框架生成的ClientID将是相同的。
int controlCount = 0;
...
TextBox newTextBox = TextBox();
newTextBox.ID = "ctl_" + controlCount++;
ControlPlaceholder.Controls.Add(newTextBox);