在我的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设置为:
答案 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" />