У меня есть несколько пользовательских элементов управления, скажем, A, B, C и D. На основе некоторого случайного ввода мне нужно сгенерировать их комбинацию. Например, если вход 2a3d1a2c, мне нужно показать два из A, после этого 3 D, снова A и т. д.
Мне также нужно будет стабилизировать клиентов, чтобы они работали правильно. Потому что каждый из этих элементов управления использует собственное свойство 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 и используете последовательный метод генерации идентификаторов элементов управления (например, простой счетчик выше), то любое состояние просмотра или привязки событий будут повторно привязаны к нужному объекту при обратной передаче.
Если важно, это происходит из свойства класса, который создается путем десериализации файла (: я попробую ваше решение, чтобы посмотреть, поможет ли оно.
Я не понимаю, в чем проблема. По замыслу, дерево элементов управления на PostBack должно быть таким же, как и при визуализации страницы. Есть ли причина, по которой вы не можете просто создавать элементы управления по порядку в Page.Init каждый раз? ClientID, созданный платформой, будет таким же.