怎样获得Repeater中某控件的实际ID?

bejesus 2005-10-06 08:59:10
某页面中有如下textbox 控件
<asp:Repeater id="Repeater" Runat="server">
<ItemTemplate>
<asp:textbox id="Text" runat="server"></asp:textbox>
</ItemTemplate>
</asp:Repeater>

在IE中浏览该页面,生成的textbox 控件的ID如下
第一个Item: <input name="Repeater:_ctl0:Text" id="Repeater__ctl0_Text"/>
第二个Item: <input name="Repeater:_ctl1:Text" id="Repeater__ctl1_Text"/>
......


我现在想得到textbox 控件的实际ID,使用如下方法:
TextBox txtText = (TextBox)e.Item.FindControl("VillageOpinion");
txtText.UniqueID;
.....

但txtText.UniqueID的值还是"Text"而不是我想要的如"Repeater__ctl0_Text"。请问有什么方法可以得到控件在页面显示时实际的ID?谢谢!
...全文
216 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bejesus 2005-10-06
  • 打赏
  • 举报
回复
估计是ItemCreated时还没有生成每个控件自己的ID...
ItemDataBound中可行,谢谢了!
hackate 2005-10-06
  • 打赏
  • 举报
回复
TextBox txtText = (TextBox)e.Item.FindControl("VillageOpinion");
Response.Write(txtText.ClientID);
看看
SnApnet 2005-10-06
  • 打赏
  • 举报
回复
楼主所要的东东在代码的最后一段!Repeater1_ItemDataBound事件中.
SnApnet 2005-10-06
  • 打赏
  • 举报
回复
刚刚写了个页面测试了一下,满足楼主需求,全部代码如下:
ASPX:


<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<tr><td><%#DataBinder.Eval(Container.DataItem,"txt")%></td>
<td><asp:TextBox Runat=server ID="txtrpt"></asp:TextBox></td></tr>
</ItemTemplate></asp:Repeater>
</form>
</body>


==ASPX.CS===============================================================

public class WebForm2 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Repeater Repeater1;
private string textboxIDstring;

private void Page_Load(object sender, System.EventArgs e)
{
if (!this.IsPostBack)
{
Repeater1.DataSource = datasource();
Repeater1.DataBind();
Response.Write(textboxIDstring);
}
}

private DataTable datasource()
{
DataTable dt = new DataTable();
dt.Columns.Add("txt");
DataRow dr;
for (int i=0;i<10;i++)
{
dr = dt.NewRow();
dr[0] = i+"txt";
dt.Rows.Add(dr);
}
return dt;
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Repeater1.ItemDataBound+=new RepeaterItemEventHandler(Repeater1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
TextBox tb = e.Item.FindControl("txtrpt") as TextBox;
if (tb!=null)
{
textboxIDstring+=tb.ClientID+"<br>";
}
}
}
happyfamily 2005-10-06
  • 打赏
  • 举报
回复
FindControl 就是查找服务控件的id,e就是代表当前行中的服务控件。
bejesus 2005-10-06
  • 打赏
  • 举报
回复
我想在Repeater控件的ItemCreated事件中就获得此Id

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧