运行asp.net应用程序时出现运行时错误

时间:2011-02-19 12:04:52

标签: asp.net

使用gridview应用程序运行带有访问数据库的asp.net应用程序。运行时我得到了运行时错误

对象引用未设置为对象的实例。

Line 41:        RadioButtonList rblGender = (RadioButtonList)GridView1.Rows[e.RowIndex].FindControl("rbGenderEdit");
Line 42:DropDownList ddlStatus = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlStatusEdit");
Line 43:SqlDataSource1.UpdateParameters["Sex"].DefaultValue = rblGender.SelectedValue;
Line 44:SqlDataSource1.UpdateParameters["MaritalStauts"].DefaultValue = ddlStatus.SelectedValue;
Line 45:         }

我在第43行特别得到了这个错误。

4 个答案:

答案 0 :(得分:1)

因此rblGender.SelectedValuerblGender为空...

答案 1 :(得分:1)

问题可能在于rblGender

按如下方式进行分配:

RadioButtonList rblGender = GridView1.Rows[e.RowIndex].FindControl("rbGenderEdit") as RadioButtonList;

然后检查可空性:

if (rblGender == null)
{
    //show error
}

答案 2 :(得分:1)

  

RadioButtonList rblGender =(RadioButtonList)GridView1.Rows [e.RowIndex] .TemplateControl.FindControl(“rbGenderEdit”);

如果它在模板字段中。

找不到rbGenderEdit。

答案 3 :(得分:0)

当你遇到像这样的运行时错误时,你应该使用你的调试器来实际看到场景后面发生了什么。例如,将断点放在第43行,在调试模式下运行程序并开始调查以查看哪个对象具有空引用并尝试修复它。

例如,看一下第41行,rblGender可能为空......

修改 您必须检查您正在操作的对象是否为空,这是defensive programming技术的一部分。

在你的例子中,正如其他人所说,你可以这样做:

if(rblGender == null) {
  // If you are running your program with a console
  // Otherwise you should display this anywhere you can or in a log file.
  Console.WriteLine("rblGender is null");
}

else if(rblGender.SelectedValue == null) {
  Console.WriteLine("rblGender.SelectedValue is null");
}

运行程序并检查正在编写的内容!这不会解决您的问题,但它只是告诉您空引用的位置,这将帮助您找出应该修复的内容!

但正如我之前所说,你也可以通过在第43行放置断点(当你点击窗口侧面时知道红球)来正确调试你的程序,然后以调试模式运行你的程序!当运行时错误启动时,您将能够检查rblGenderrblGender.SelectedValue是否为空。

此外,从更一般的角度来看,针对空引用检查对象将通过管理objet在任何给定时间可能具有空引用的情况来防止应用程序突然崩溃。例如,您可以说:

if(my_object is null)
{
   myValue = "default";
}

else 
{
  myValue = my_objet.getValue();
}

这只是一个例子,它可以用更好的方式完成,例如使用异常(try / catch / finally),但一般的想法是:检查空引用!