Изменение идентификатора WebControl Внутри ретранслятора

StackOverflow https://stackoverflow.com/questions/889485

  •  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 повторителя.В этом случае вы должны иметь возможность создать выпадающий элемент управления "вручную", присвоив любой идентификатор, который вы хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top