8

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

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

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

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

  • 我的文本框1
  • 我的文本框2
  • 我的文本框3
4

1 回答 1

18

所以我的页面显示了三个文本框,每个文本框的 ID 都是 myTextBox 的 3 次。

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

<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控件。您必须在数据绑定时将其设置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);
}

给出这个 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" />
于 2013-02-01T20:21:35.723 回答