2013-06-26 199 views
0

我有一个中继器和内部的标签我有一个复选框,其中.Checked属性我想在中继器的ItemDataBound事件内设置。问题是args.Item.FindControl("checkboxSelect");返回我nullFindControl内部中继器不工作

下面是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

但CheckBox没有'RunAt =“Server”'那么解析器怎么知道呢? – Belogix

回答

4

FindControl只能找到服务器端控件,而不是纯HTML标签。因此在这个特定的中继器中不可能找到任何东西。然而,你可以随时打开HTML标记到服务器端控件与runat

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

现在每个checkboxSelect将被添加到控件集合,FindControl就能找到它。

+0

Omg我该怎么做那个笨蛋不要发现这个:)谢谢! –

+0

btw你知道如何将'>'转换为asp.net(CheckBox)',因为它在那里抛出异常。 –

+0

@AntonBelev,这是不可能的,因为从技术上讲这些是两个完全不同的控制。你在服务器端的'输入'用'System.Web.UI.HtmlControls.HtmlInputCheckBox'类表示,试着对它进行转换。 – Andrei