Thus, my page displays three text fields, each with the identifier myTextBox three times.
Are you sure about that? It looks like you're talking about output output. Browse the source and you will find:
<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" />
From the code behind you can access this generated identifier using the ClientID property. You can also access individual controls by searching the Items repeater property:
TextBox textBox2 = myRepeater.Items[1].FindControl("myTextBox");
Edit: You can explicitly set the ClientID for the control. You must set ClientIDMode to Static and change the identifier when it is bound to the database:
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); }
Gives this HTML code:
<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" />
source share