2013-06-26 192 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