1

我无法访问按钮单击事件上的 html 复选框。该复选框位于 gridview 控件中。

<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");
        }}
4

2 回答 2

0

FindControl方法返回checkbox但返回null。这就是为什么您会收到“未将对象引用设置为对象的实例”。当您将访问Checked财产。您需要 putrunat="server"以使复选框服务器可访问。

改变

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

 <input type="checkbox"  id="_chkSelect" runat="server" />
于 2013-10-19T14:45:53.243 回答
0

我建议检查null:

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>
于 2013-10-19T16:29:12.477 回答