在Repeater中设置Items的ID

Rhs*_*Rhs 6 c# asp.net repeater

在我的aspx中,我有一个包含三个文本框的转发器:

<asp:Repeater ID="myRepeater" runat="server">
    <ItemTemplate>
        <asp:TextBox ID="myTextBox" runat="server"
    <ItemTemplate/>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)

在我的代码隐藏中,我将转发器数据绑定到一个数组 int data = new int[3];

所以我的页面显示三个文本框,每个文本框的myTextBox ID为三次.有没有办法将这些ID设置为:

  • MyTextBox1
  • MyTextBox2
  • MyTextBox3

gil*_*ly3 16

所以我的页面显示三个文本框,每个文本框的myTextBox ID为三次.

你确定吗?听起来你在谈论渲染输出.查看来源,您会发现:

<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" />
Run Code Online (Sandbox Code Playgroud)

从后面的代码中,您可以通过ClientID属性访问此生成的ID .您还可以通过搜索转发器的Items属性来访问各个控件:

TextBox textBox2 = myRepeater.Items[1].FindControl("myTextBox");
Run Code Online (Sandbox Code Playgroud)

编辑:可以显式设置ClientID控件.您必须将其设置ClientIDModeStatic并在数据绑定时更改ID:

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);
}
Run Code Online (Sandbox Code Playgroud)

给出这个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" />
Run Code Online (Sandbox Code Playgroud)