Изменение идентификатора WebControl внутри ретранслятора - PullRequest
0 голосов
/ 20 мая 2009
<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>

Это примерно то, что я пытаюсь сделать. Очевидно, что реализация ошибочна, но я не могу найти никакой информации о том, как бы я поступил с этим на практике. Любая помощь приветствуется.

Редактировать: что я пытаюсь сделать, это добавить DropDownList для каждого элемента в этом репитере, а после отправки формы использовать идентификаторы каждого ответа Да / Нет для ввода в базу данных. Используемый мной SqlDataReader имеет два поля: содержание вопроса и идентификатор вопроса.

Ответы [ 2 ]

4 голосов
/ 20 мая 2009

Я думаю, вам лучше использовать встроенную поддержку идентификаторов внутри повторителя. Если цель состоит в том, чтобы назначить ему идентификатор, чтобы облегчить поиск правильного элемента управления после привязки данных, вы можете попробовать что-то вроде этого:

<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;
}   

Repeater в основном состоит из набора RepeaterItems. RepeaterItems указываются с помощью тега ItemTemplate. Каждый RepeaterItem имеет свой собственный набор элементов управления, которые по самой природе Repeater связаны друг с другом.

Скажем, вы извлекаете данные Repeater из базы данных. Каждый элемент Repeater представляет данные из отдельной строки в результатах запроса. Поэтому, если вы назначите QuestionID метке, а QuestionName - DropDownList, идентификатор в метке будет совпадать с выпадающим именем.

0 голосов
/ 05 мая 2010

Не могли бы вы удалить элемент управления из файла разметки и перехватить событие повторителя onItemDataBound. В этом случае вы сможете создать выпадающий элемент управления «вручную», назначив любой желаемый идентификатор.

...