我有一个包含一些控件的转发器,我想根据数据库中的ID设置它们的ID。 转发器的数据源是一个列表,所以基本上我想在后面的代码中做这样的事情,在repeater_ItemDataBound()中:
var myControl = e.Item.FindControl("controlID");
myControl.ClientIDMode = ClientIDMode.Static;
myControl.ID = e.Item.DataItem("ID"); //but I can't access the ID property, so here's my problem.
考虑到我宣称我的转发器是这样的:
<asp:Repeater ID="repeater" runat="server">
<ItemTemplate>
<div class="someClass">
<asp:Label ID="controlID" runat="server"><%# Eval("Name")%></asp:Label>
<!-- list of other controls -->
</div>
</ItemTemplate>
</asp:Repeater>
答案 0 :(得分:1)
不要更改已使用其他ID创建的控件的ID。这可能会导致令人讨厌的错误。而是首先使用正确的ID。或者使用您使用的任何ID,并将标识符分配给其他属性,例如CommandArgument
,如果它是Button
,Value
,如果它是HiddenField
或{ {1}}如果它是(不可见的)Text
或TextBox
。
因此,在这种情况下,您可以使用另一个控件来存储ID:
Label
现在,如果您需要当前项目的ID,并且您拥有该转发器项目中的标签或其他控件的引用:
<asp:HiddenField ID="hiddenID" runat="server" Value='<%# Eval("ID")%>' />
<asp:Label ID="lblName" runat="server"><%# Eval("Name")%></asp:Label>