设置转发器控件的ID

时间:2015-02-13 09:08:27

标签: asp.net 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>

1 个答案:

答案 0 :(得分:1)

不要更改已使用其他ID创建的控件的ID。这可能会导致令人讨厌的错误。而是首先使用正确的ID。或者使用您使用的任何ID,并将标识符分配给其他属性,例如CommandArgument,如果它是ButtonValue,如果它是HiddenField或{ {1}}如果它是(不可见的)TextTextBox

因此,在这种情况下,您可以使用另一个控件来存储ID:

Label

现在,如果您需要当前项目的ID,并且您拥有该转发器项目中的标签或其他控件的引用:

<asp:HiddenField ID="hiddenID" runat="server" Value='<%# Eval("ID")%>' />
<asp:Label ID="lblName"  runat="server"><%# Eval("Name")%></asp:Label>