Установить ID предметов в повторителе

В моем aspx у меня есть повторитель, который содержит три текстовых поля:

<asp:Repeater ID="myRepeater" runat="server">
    <ItemTemplate>
        <asp:TextBox ID="myTextBox" runat="server"
    <ItemTemplate/>
</asp:Repeater>

В моем коде есть повторитель данных, привязанный к массиву int data = new int[3];

Таким образом, моя страница отображает три текстовых поля, каждое с идентификатором myTextBox три раза. Есть ли способ установить эти идентификаторы так:

  • MyTextBox1
  • MyTextBox2
  • MyTextBox3

1 ответ

Решение

Таким образом, моя страница отображает три текстовых поля, каждое с идентификатором myTextBox три раза.

Вы уверены, что? Похоже, вы говорите о визуализации вывода. Посмотрите на источник, и вы найдете:

<input name="myRepeater$ctl00$myTextBox" type="text" id="myRepeater_myTextBox_0" />
<input name="myRepeater$ctl01$myTextBox" type="text" id="myRepeater_myTextBox_1" />
<input name="myRepeater$ctl02$myTextBox" type="text" id="myRepeater_myTextBox_2" />

Из этого кода вы можете получить доступ к этому сгенерированному идентификатору через ClientID имущество. Вы также можете получить доступ к отдельным элементам управления, выполнив поиск в репитере Items имущество:

TextBox textBox2 = myRepeater.Items[1].FindControl("myTextBox");

Изменить: вы можете явно установить ClientID для контроля. Вы должны установить его ClientIDMode вStatic и измените идентификатор, когда он связан с данными:

protected void Page_Load(object sender, EventArgs e)
{
    myRepeater.ItemDataBound += new RepeaterItemEventHandler(myRepeater_ItemDataBound);
    myRepeater.DataSource = new int[3];
    myRepeater.DataBind();
}

void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    var textbox = e.Item.FindControl("myTextBox");
    textbox.ClientIDMode = ClientIDMode.Static;
    textbox.ID = "myTextBox" + (e.Item.ItemIndex + 1);
}

Дает этот HTML:

<input name="myRepeater$ctl01$myTextBox1" type="text" id="myTextBox1" />
<input name="myRepeater$ctl02$myTextBox2" type="text" id="myTextBox2" />
<input name="myRepeater$ctl02$myTextBox3" type="text" id="myTextBox3" />
Другие вопросы по тегам