我在global.asax写了如下代码
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
' 在会话启动时激发
Session.Timeout = 60
Session("ShoppingCart") = ""
End Sub然后在某一页面写page_load写了如下代码
Dim Cart As DataTable
If Session("ShoppingCart") = Nothing Then
Cart = New DataTable
Cart.Columns.Add(New DataColumn("Title", GetType(String)))
Cart.Columns.Add(New DataColumn("Price", GetType(String)))
Session("ShoppingCart") = Cart
End If 这个页面在首次运行时没有出现错误提示,但当刷新一下就会出现错误
“运算符对 类型“DataTable” 和 'Nothing' 无效”
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
' 在会话启动时激发
Session.Timeout = 60
Session("ShoppingCart") = ""
End Sub然后在某一页面写page_load写了如下代码
Dim Cart As DataTable
If Session("ShoppingCart") = Nothing Then
Cart = New DataTable
Cart.Columns.Add(New DataColumn("Title", GetType(String)))
Cart.Columns.Add(New DataColumn("Price", GetType(String)))
Session("ShoppingCart") = Cart
End If 这个页面在首次运行时没有出现错误提示,但当刷新一下就会出现错误
“运算符对 类型“DataTable” 和 'Nothing' 无效”
Cart = New DataTable
Cart.Columns.Add(New DataColumn("Title", GetType(String)))
Cart.Columns.Add(New DataColumn("Price", GetType(String)))
Session("ShoppingCart") = Cart
End If
这里面的代码永远不会被执行,因为Session一开始就被初始化为"",而""和Nothing是不相等的
改为
If Session("ShoppingCart") is Nothing Then
这一段是有执行的,我验证过了
因为我试过在这个IF语结束后加了几段代码
dim aaa as DataTable
aaa=Session("ShoppingCart")
label1.text=aaa.Columns.Count
结果运行页面是label1显示“2”,这就证明那一段代码是有被执行的。
如果按你照你所说的把"="改"is"的话,反尔出现fancyf(凡瑞)所说的情况,该段代码不能被执行
我对vb不熟,还以为Nothing相当于C#中的null呢
is nothing是判断那个Session是否存在,所以这样的话,一开始那段代码根本没有执行到,因为那个Session一早就已经设定了。其实原因我想是因为DataTable对象是否有值不能用"="来进行判断。不知应该用什么来进行判断现在折衷的办法就是先不要在global里设定Session。