NullReference异常:当尝试在gridview中选中复选框字段时
本文关键字:复选框 字段 gridview 异常 NullReference | 更新日期: 2023-09-27 18:26:07
我有一个带有一些复选框的网格视图。因此,在网格视图更新后,我试图查看是否选中了一个特定的复选框。然而,我得到了一个错误说
用户代码未处理空引用异常
我的代码:
<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>
代码隐藏文件:
protected void GViewSrvcCheck_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
foreach (GridViewRow gRow in GViewSrvcCheck.Rows)
{
CheckBox fllwup = gRow.FindControl("chkFollowup") as CheckBox;
if (fllwup.Checked)//this is the one causes the error
{
}
}
}
这里出了什么问题?我怎么能克服这个问题呢?
有两个可能的问题:
- 找不到控件
- 它不是
CheckBox
如果你用石膏代替,你就会知道是哪一个:
CheckBox followUp = (CheckBox) gRow.FindControl("chkFollowup");
使用as
之后不检查无效性几乎总是错误的。
我怀疑问题是ID实际上也有一些东西可以识别其中的行。。。但有了以上的改变,你至少可以判断出你走的是哪条错误路径。
您可能需要更改查找控件的方式,但只要"找不到控件"是错误,我认为让它抛出异常是合理的。如果控件不存在是合法的情况,则应该显式处理它,但除此之外,向用户显示错误页面并记录异常(例如使用ELMAH)是可以的。