我有一个转发器,在标签内部我有一个复选框,我想要在转发器的ItemDataBound事件中设置.Checked
属性。问题是args.Item.FindControl("checkboxSelect");
会返回null
。
这是HTML:
<asp:Repeater ID="productRepeater" runat="server" OnItemDataBound="productRepeater_ItemDataBound">
<ItemTemplate>
<tr class="hand">
<td class="hyperLink center-text width50px">
<fieldset data-role="controlgroup" id="divCheckbox">
<input type="checkbox" name="checkboxSelect" id="checkboxSelect" class="custom" />
<label for="checkboxSelect">
</label>
</fieldset>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
productRepeater_ItemDataBound方法:
protected void productRepeater_ItemDataBound(object sender, RepeaterItemEventArgs args)
{
CheckBox checkboxSelect = (CheckBox)args.Item.FindControl("checkboxSelect");
}
我认为导致问题的原因是<fieldset data-role="controlgroup" id="divCheckbox">
,因为在转发器中的另一个<td>
(未显示)中我找到控件没有问题。有关如何在当前情况下获得控制权的任何建议吗?
答案 0 :(得分:4)
FindControl
只能查找服务器端控件,而不能查找纯HTML标记。因此,在这个特殊的中继器中,它不太可能找到任何东西。但是,您始终可以使用runat
将HTML标记转换为服务器端控件:
<input runat="server" type="checkbox" name="checkboxSelect" id="checkboxSelect" class="custom" />
现在每个checkboxSelect
都会添加到控件集合中,FindControl
将能够找到它。