题
我有几个用户控件,比方说 A
, B
, C
和 D
. 。基于一些随机输入,我需要生成这些的组合。例如如果输入是 2a3d1a2c
我需要显示两个 A,之后显示 3 个 D,再显示一个 A,等等。
我还需要稳定 clientid 以便它们正常工作。因为每个控件都使用自己的 ClientID
属性来收集自身的输入。例如用户控件A内部生成一个名为 this.ClientID + "$input1"
, ,并从请求中收集其输入,例如 Request[this.ClientID + "$input1"]
. 。由于可以有多个 A,因此每个 A 需要具有相同的 (unique) ClientID
回发后以便从请求中获取正确的输入。
解决方案
要动态添加控件,您可以使用面板作为占位符,例如
<asp:Panel ID="ControlPlaceholder" runat="server" />
然后,在服务器端,您可以向其中添加对象,如下所示:
int controlCount = 0;
...
TextBox newTextBox = TextBox();
newTextBox.ID = "ctl_" + controlCount++;
ControlPlaceholder.Controls.Add(newTextBox);
如果您在 Page_Load 事件期间向其中添加控件并使用一致的方法生成控件的 ID(例如上面的简单计数),则任何视图状态或事件绑定都将在回发时重新绑定到正确的对象。
不隶属于 StackOverflow