【问题标题】:FindControl inside repeater not working中继器内的 FindControl 不起作用
【发布时间】:2023-03-23 21:25:01
【问题描述】:

我有一个转发器,在标签里面我有一个复选框,我想在转发器的 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");
}

我假设导致问题的原因是&lt;fieldset data-role="controlgroup" id="divCheckbox"&gt;,因为在转发器中的另一个&lt;td&gt;(未显示)中,我找到控件没有问题。有什么建议如何在当前情况下获得控制权?

【问题讨论】:

  • 但是 CheckBox 没有RunAt="Server" 那么解析器怎么知道呢?

标签: c# asp.net repeater findcontrol


【解决方案1】:

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

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

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

【讨论】:

  • 天哪,我怎么会这么愚蠢,没有发现这一点:)非常感谢!
  • 顺便说一句,你知道如何将 &lt;input type="checkbox"&gt; 转换为 asp.net (CheckBox),因为它会在那里引发异常。
  • @AntonBelev,这是不可能的,因为从技术上讲,这是两个完全不同的控件。您在服务器端的 inputSystem.Web.UI.HtmlControls.HtmlInputCheckBox 类表示,尝试转换为它。
猜你喜欢
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多