设置中继器控件的ID
Set IDs of controls of a repeater
我有一个包含一些控件的转发器,我想根据数据库中的 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>
不要更改已使用不同 ID 创建的控件的 ID。这可能会导致严重的错误。而是首先使用正确的 ID。或者使用您使用的任何 ID,并将标识符分配给不同的 属性,例如 CommandArgument
如果它是 Button
,Value
如果它是 HiddenField
或 Text
如果它是(不可见的)TextBox
或 Label
.
所以在这种情况下,您可以使用另一个控件来存储 ID:
<asp:HiddenField ID="hiddenID" runat="server" Value='<%# Eval("ID")%>' />
<asp:Label ID="lblName" runat="server"><%# Eval("Name")%></asp:Label>
现在,如果您需要当前项目的 ID 并且您拥有该转发器项目中的标签或其他控件的引用:
var item = (RepeaterItem) lblName.NamingContainer;
HiddenField hiddenID = (HiddenField) item.FindControl("hiddenID");
string id = hiddenID.Value;
我有一个包含一些控件的转发器,我想根据数据库中的 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>
不要更改已使用不同 ID 创建的控件的 ID。这可能会导致严重的错误。而是首先使用正确的 ID。或者使用您使用的任何 ID,并将标识符分配给不同的 属性,例如 CommandArgument
如果它是 Button
,Value
如果它是 HiddenField
或 Text
如果它是(不可见的)TextBox
或 Label
.
所以在这种情况下,您可以使用另一个控件来存储 ID:
<asp:HiddenField ID="hiddenID" runat="server" Value='<%# Eval("ID")%>' />
<asp:Label ID="lblName" runat="server"><%# Eval("Name")%></asp:Label>
现在,如果您需要当前项目的 ID 并且您拥有该转发器项目中的标签或其他控件的引用:
var item = (RepeaterItem) lblName.NamingContainer;
HiddenField hiddenID = (HiddenField) item.FindControl("hiddenID");
string id = hiddenID.Value;