转发器内的FindControl无法正常工作

时间:2013-06-26 14:33:56

标签: c# asp.net repeater findcontrol

我有一个转发器,在标签内部我有一个复选框,我想要在转发器的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>(未显示)中我找到控件没有问题。有关如何在当前情况下获得控制权的任何建议吗?

1 个答案:

答案 0 :(得分:4)

FindControl只能查找服务器端控件,而不能查找纯HTML标记。因此,在这个特殊的中继器中,它不太可能找到任何东西。但是,您始终可以使用runat将HTML标记转换为服务器端控件:

<input runat="server" type="checkbox" name="checkboxSelect" id="checkboxSelect" class="custom" />

现在每个checkboxSelect都会添加到控件集合中,FindControl将能够找到它。