ASP.NET会话对象引用未设置为对象的实例

时间:2011-07-28 13:29:56

标签: asp.net vb.net nullreferenceexception

嘿,只是想知道以下情况如何发生

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

customerName.Text = Session(“userName”)。ToString()

    If (Session("userId") Is Nothing) Then
        Response.Redirect(ConfigurationManager.AppSettings("site_base_url").ToString & "login/", False)
    End If

    customerName.Text = Session("userName").ToString()

现在我目前没有在此页面上设置会话。所以会话是NULL但我只是想知道为什么我的if语句正在处理这个问题,为什么它甚至试图进入下一部分,即Response.Write?

3 个答案:

答案 0 :(得分:1)

在您的代码段中,无论上面的Response.Write(Session("UID").ToString)语句发生什么,行if 始终都会被执行。

我想知道奇怪的缩进是不是让你感到困惑。试着这样看:

If (Session("userName") IsNot Nothing) Then
    customerName.Text = Session("userName").ToString()
End If

Response.Write(Session("UID").ToString)

请注意,我已将End If与上方的相应IfResponse.Write...对齐。 Response.Write...行显然位于If块之外,因为If块中没有返回或中断或继续,它将始终执行。

顺便说一句,它可能不是Session对象为null。您正在对假定包含在Session对象中的项目调用ToString。会话更可能不包含“UID”条目。

答案 1 :(得分:0)

Response.Write()不在IF语句之内,因此无论是否会运行会话Is NothingResponse.Write()方法。


或者,也许您尝试为会话分配一个值,如果它还没有一个?在这种情况下,我认为你的代码是反向的:

customerName.Text = Session("userName").ToString()

应该是:

Session("userName") = customerName.Text

答案 2 :(得分:0)

你的

customerName.Text = Session("userName").ToString();
无论会话的价值是多少,都将执行

。在if条件中,您正在检查(会话(“userId”)而不是会话(“userName”)。它们都是不同的会话变量。如果是某些原因会话(“userName”)值之前未分配,您将获得“未将对象引用设置为对象实例”异常。 在将值赋给customerName.Text

之前,我会先进行会话空检查
if(Session("userName") IsNot Nothing) Then
    customerName.Text = Session("userName").ToString();