Как динамически генерировать комбинацию ASP.NET пользовательских элементов управления?
-
01-07-2019 - |
Вопрос
Скажем, у меня есть несколько пользовательских элементов управления A
, B
, C
и D
.Основываясь на некоторых случайных входных данных, мне нужно сгенерировать их комбинацию.Например, дляесли входные данные являются 2a3d1a2c
Мне нужно показать две пятерки, после этого 3 двойки, снова пятерку и т.д.
Мне также нужно будет стабилизировать идентификаторы клиентов, чтобы они работали корректно.Потому что каждый из этих элементов управления использует свои собственные 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 и используете согласованный метод генерации идентификаторов элементов управления (например, простой подсчет выше), то любые привязки viewstate или event будут повторно привязаны к нужному объекту при обратной передаче.