Изменение идентификатора WebControl Внутри ретранслятора
-
23-08-2019 - |
Вопрос
<ItemTemplate>
<asp:Label runat="server"><%#DataBinder.Eval(Container.DataItem, "Question")%></asp:Label>
<asp:DropDownList runat="server" id="<%#DataBinder.Eval(Container.DataItem, "QuestionID")%>">>
<asp:ListItem value="1" text="Yes" />
<asp:ListItem value="0" text="No" />
</asp:DropDownList>
<ItemTemplate>
Это примерно то, что я пытаюсь сделать.Очевидно, что реализация ошибочна, но я не могу найти никакой информации о том, как бы я поступил с этим на практике.Любая помощь приветствуется.
Редактировать:Что я пытаюсь сделать в точности, так это добавить выпадающий список для каждого элемента в этом повторителе и после отправки формы использовать идентификаторы каждого ответа "Да" / "Нет" для ввода в базу данных.SqlDataReader, который я использую, содержит два поля:Содержание вопроса и QuestionID.
Решение
Я думаю, вам было бы лучше использовать встроенную поддержку идентификаторов внутри ретранслятора.Если цель состоит в том, чтобы присвоить ему идентификатор, чтобы упростить поиск нужного элемента управления после привязки данных, вы могли бы попробовать что-то вроде этого:
<asp:Repeater ID="Repeater1" runat="server>
<ItemTemplate>
<asp:Label ID="QuestionID" Visible="False" Runat="server"><%#DataBinder.Eval(Container.DataItem, "FieldContent")%></asp:Label>
<asp:DropDownList ID="MyDropDownList" Runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
Затем в своем коде вы можете перебирать элементы в повторителе, пока не найдете нужную метку:
foreach (RepeaterItem curItem in Repeater1.Items)
{
// Due to the way a Repeater works, these two controls are linked together. The questionID
// label that is found is in the same RepeaterItem as the DropDownList (and any other controls
// you might find using curRow.FindControl)
var questionID = curRow.FindControl("QuestionID") as Label;
var myDropDownList = curRow.FindControl("MyDropDownList") as DropDownList;
}
Повторитель в основном состоит из набора элементов RepeaterItems.Элементы RepeaterItems задаются с помощью тега ItemTemplate.Каждый RepeaterItem имеет свой собственный набор элементов управления, которые по самой природе Repeater связаны друг с другом.
Допустим, вы извлекаете данные ретранслятора из базы данных.Каждый элемент Repeater представляет данные из отдельной строки в результатах запроса.Таким образом, если вы присвоите QuestionID метке, а имя анкеты - выпадающему списку, идентификатор в метке будет совпадать с именем в выпадающем списке.
Другие советы
Не могли бы вы удалить элемент управления из файла разметки и подключить событие OnItemDataBound повторителя.В этом случае вы должны иметь возможность создать выпадающий элемент управления "вручную", присвоив любой идентификатор, который вы хотите.