C# NullReference异常:尝试选中gridview中的复选框字段时

C# NullReference异常:尝试选中gridview中的复选框字段时,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个带有一些复选框的网格视图。所以在网格视图更新之后,我尝试查看是否选中了一个特定的复选框。然而,我得到了一个错误,他说 用户代码未处理空引用异常 我的代码: <asp:TemplateField HeaderText="FollowUp" SortExpression="FollowUp"> <EditItemTemplate> <asp:CheckBox ID="CheckBox1" runat="server" C

我有一个带有一些复选框的网格视图。所以在网格视图更新之后,我尝试查看是否选中了一个特定的复选框。然而,我得到了一个错误,他说

用户代码未处理空引用异常

我的代码:

<asp:TemplateField HeaderText="FollowUp" SortExpression="FollowUp">
   <EditItemTemplate>
      <asp:CheckBox ID="CheckBox1" runat="server" 
           Checked='<%# Bind("FollowUp") %>' />
   </EditItemTemplate>
   <ItemTemplate>
      <asp:CheckBox ID="chkFollowup" runat="server" 
           Checked='<%# Bind("FollowUp") %>' Enabled="false" />
   </ItemTemplate>
</asp:TemplateField>

这里出了什么问题?我怎样才能克服这个问题呢?

有两个可能的问题:

  • 找不到控件
  • 它不是一个
    复选框
如果你使用了石膏,你就会知道它是什么:

CheckBox followUp = (CheckBox) gRow.FindControl("chkFollowup");
用作
而事后不检查空值几乎总是错误的

我怀疑问题在于ID实际上也有一些东西来标识其中的行。。。但是通过上面的更改,您至少能够知道您所采取的错误路径


您可能必须更改查找控件的方式—但只要“未找到控件”是一个错误,我认为让它抛出异常是合理的。如果控件不存在是一种合法的情况,您应该显式地处理它-否则,向用户显示一个错误页面并记录异常(例如使用ELMAH)是可以的。

您可能会添加一个不包含该模板的页眉/页脚,因此在Rows集合中选中时,它抛出一个空错误(找不到对象)Thnx,将复选框ID“chkFollowup”从项目模板字段复选框控件更改为编辑模板字段复选框字段修复了该问题。
CheckBox followUp = (CheckBox) gRow.FindControl("chkFollowup");