使用标签的for属性引用转发器内的控件

时间:2017-03-23 17:40:57

标签: c# html asp.net vb.net

我正在尝试利用转发器内部标签元素的for属性,但由于引用的控件是runat="server",因此在引用的控件中更改了id,但在标签中没有更改使用for属性引用它。

此:

<label class="btn btn-primary active" runat="server" id="lblForm" for="cbForm">
    <input type="checkbox" autocomplete="off" id="cbForm" runat="server"/>
    <label>
        <%#Container.DataItem.Title%>
    </label>
</label>

被渲染为:

<label id="afForms_rptForms_ctl00_lblForm" class="btn btn-primary active" for="cbForm">
    <input name="afForms$rptForms$ctl00$cbForm" type="checkbox" id="afForms_rptForms_ctl00_cbForm" autocomplete="off">
    <label>
        Some String Value Here
    </label>
</label>

所以现在标签不再用于指定的复选框控件,因为id已被.net更改。如果.net更改id,我如何保持for归因当前的控件ID为控件的id?我不想将ClientIDMode更改为静态,因为我将有多个标签/复选框,这将在转发器中创建重复的id值。

1 个答案:

答案 0 :(得分:1)

这就是我最终在我的转发器ItemDataBound事件中做的事情,以使其工作。

Protected Sub rptForms_ItemDataBound(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptForms.ItemDataBound
    Dim lblForm As HtmlGenericControl = CType(e.Item.FindControl("lblForm"), HtmlGenericControl)
    Dim cb As HtmlInputCheckBox = CType(e.Item.FindControl("cbForm"), HtmlInputCheckBox)
    lblForm.Attributes.Item("for") = cb.ClientID
End Sub