8 votes

Définir l'ID des éléments dans un répéteur

Dans mon aspx, j'ai un repeater qui contient trois textboxes :

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

Dans mon code, mon répéteur est lié à un tableau. int data = new int[3];

Ma page affiche donc trois zones de texte, chacune avec l'ID de myTextBox trois fois. Existe-t-il un moyen de définir ces ID comme étant :

  • MyTextBox1
  • MyTextBox2
  • MyTextBox3

18voto

gilly3 Points 33285

Ma page affiche donc trois zones de texte, chacune avec l'ID de myTextBox trois fois.

Vous êtes sûr de ça ? On dirait que vous parlez de la sortie rendue. Regardez la source et vous trouverez :

<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" />

Dans le code qui suit, vous pouvez accéder à cet identifiant généré via la fonction ClientID propriété. Vous pouvez également accéder à des commandes individuelles en recherchant dans le dossier de votre répéteur Items propriété :

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

Edita: Vous puede définir explicitement le ClientID pour un contrôle. Vous devez définir son ClientIDMode a Static et changer l'ID quand il est lié aux données :

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

Donne ce 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" />

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X