设置转发器的控件 ID



我有一个包含一些控件的中继器,我想根据数据库中的 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如果它是ButtonValue如果是HiddenFieldText,如果是(不可见的(TextBoxLabel

因此,在这种情况下,您可以使用另一个控件来存储 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;

最新更新