在Repeater中设置Items的ID

时间:2013-02-01 20:08:11

标签: c# asp.net repeater

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

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

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

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

  • MyTextBox1
  • MyTextBox2
  • MyTextBox3

1 个答案:

答案 0 :(得分: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" />

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

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

修改:您可以明确设置控件的ClientID。您必须设置其ClientIDMode to Static并在数据绑定时更改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);
}

提供此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" />