System.NullReferenceException: 未将对象引用设置到对象的实例
在调试程序时,出现了如下错误提示:
System.NullReferenceException: 未将对象引用设置到对象的实例(错误代码在Session所在行)
以下是网上查找到的解决思路及方法:
一个重要的知识点:“System.NullReferenceException: 未将对象引用设置到对象的实例”问题可能原因如下:
- ViewState 对象为Null。
- DateSet 空。
- sql语句或Datebase的原因导致DataReader空。
- 声明字符串变量时未赋空值就应用变量。
- 未用new初始化对象。
- Session对象为空。
- 对控件赋文本值时,值不存在。
- 使用Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值。
- 使用FindControl时,控件不存在却没有做预处理。
- 重复定义造成未将对象引用设置到对象的实例错误.
我的错误是第六种,Session对象为空。
错误原因:在调用 Session["userid"].ToString() 前应先检查 Session["userid"] 对象是否为 null
在未登录的情况下, Session["userid"] 的值是null,直接用ToString()方法肯定会出错的...
原来的代码:
protected void Page_Load(object sender, EventArgs e) { strIP = Request.UserHostAddress.ToString(); strUserID = Session["userid"].ToString(); strMessage = this.tbMessage.Text; strPostID = Request["postid"].ToString(); strReplyTime = DateTime.Now.ToString(); }改正后的代码:
protected void Page_Load(object sender, EventArgs e) { if (Session["userid"] != null && Session["postid"] != null) { strIP = Request.UserHostAddress.ToString(); strUserID = Session["userid"].ToString(); strMessage = this.tbMessage.Text; strPostID = Request["postid"].ToString(); strReplyTime = DateTime.Now.ToString(); } }以下是官方给出的解决方案
VisualStudio2005(c#)项目调试问题解决方案:System.NullReferenceException: 未将对象引用设置到对象的实例。
原因:
- 所设置的变量为空值或没有取到值,一般出现在传递参数的时候出现这个问题,也会在使用datagrid或gridview或datalist等数据控件时出现.
- 控件名称与codebehind里面的没有对应
- 未用new初始化对象
- 在程序中所引用的控件不存在
- 使用try..catch...finally捕捉错误,或直接用response.write()输出所取的变量值
- 查看代码中是否存在未初始化的变量
下一篇 >>