无法访问按钮单击事件上的 GridView HTML 复选框,它显示“对象引用未设置为对象的实例”

本文关键字:对象引用 显示 设置 实例 对象 复选框 单击 按钮 访问 事件 HTML | 更新日期: 2023-09-27 18:36:06

我无法访问按钮单击事件的html复选框。该复选框位于网格视图控件中。

<asp:GridView ID="_grvItems" runat="server"  />
              <Columns>
               <asp:TemplateField>
                        <ItemTemplate>
                            <input type="checkbox"  id="_chkSelect" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
                <PagerStyle CssClass="pgr" />
            </asp:GridView>

单击按钮,然后向我显示错误"对象引用未设置为对象的实例"。按钮单击事件的代码为:

 for (int i = 0; i < _grvItems.Rows.Count; i++)
    {
        HtmlInputCheckBox ch = (HtmlInputCheckBox)_grvItems.Rows[i].FindControl("_chkSelect");
        if (ch.Checked)
        {
            Response.Write("Checkbox is Checked");
        }}

无法访问按钮单击事件上的 GridView HTML 复选框,它显示“对象引用未设置为对象的实例”

FindControl方法不是返回checkbox而是返回null。这就是您获得"对象引用未设置为对象的实例"的原因。当您访问Checked财产时。您需要放置runat="server"以使复选框服务器可访问。

改变

 <input type="checkbox"  id="_chkSelect" />

 <input type="checkbox"  id="_chkSelect" runat="server" />

我建议检查空:

HtmlInputCheckBox ch = (HtmlInputCheckBox)_grvItems.Rows[i].FindControl("_chkSelect");
if (ch!= null && ch.Checked)
{
    Response.Write("Checkbox is Checked");
}}

编辑(正如阿迪尔指出的那样:

我还会更改标记:

<asp:GridView ID="_grvItems" runat="server"  />
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>    
                <input type="checkbox"  id="_chkSelect" runat="server" />    
            </ItemTemplate>
        </asp:TemplateField>        
    </Columns>
    <PagerStyle CssClass="pgr" />
</asp:GridView>