组项目的ID在一个转发器(Set ID of Items In a Repeater)

2019-07-19 03:06发布

在我的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

Answer 1:

所以我的页面显示三个文本框,每一个都具有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" />

从后面的代码,你可以通过访问该生成的ID ClientID属性。 您也可以通过您的转发器的搜索访问单个控制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" />


文章来源: Set ID of Items In a Repeater