嘿,只是想知道以下情况如何发生
对象引用未设置为对象的实例。
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?
答案 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
与上方的相应If
和Response.Write...
对齐。 Response.Write...
行显然位于If
块之外,因为If
块中没有返回或中断或继续,它将始终执行。
顺便说一句,它可能不是Session
对象为null。您正在对假定包含在Session对象中的项目调用ToString
。会话更可能不包含“UID”条目。
答案 1 :(得分:0)
Response.Write()
不在IF
语句之内,因此无论是否会运行会话Is Nothing
,Response.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();