我正在尝试利用转发器内部标签元素的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值。
答案 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