无法访问按钮单击事件上的 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");
}}
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>