嘿,我最近创建了一个购物车,但是我在将购买的商品分类到gridview时遇到了问题。这是我的购物车类:
Public Class Cart
Private dt As DataTable = New DataTable()
Public Sub New()
dt.Columns.Add(New DataColumn("Product ID"))
dt.Columns.Add(New DataColumn("Quantity"))
dt.PrimaryKey = New DataColumn() {dt.Columns("Product ID")}
End Sub
Public Sub AddToCart(ByVal prd_id As Integer, ByVal quantity As Integer)
Dim dr As DataRow = dt.NewRow()
dr("Product ID") = prd_id
dr("Quantity") = quantity
dt.Rows.Add(dr)
End Sub
Public Sub RemoveFromCart(ByVal prd_id As Integer)
Dim dr As DataRow = dt.Rows.Find(prd_id)
dt.Rows.Remove(dr)
End Sub
Public Function GetCart() As DataTable
Return dt
End Function
End Class
这是按钮功能:
If Session("Customer_ID") <> Nothing Then
Dim userCart As Cart = CType(Session("shoppingCart"), Cart)
Dim qty As Integer = txtqty.text
Dim pid As Integer = lblid.text
userCart.AddToCart(pID, qty)
Else
Response.Redirect("User_Login.aspx")
End If
当我尝试运行代码时,我得到一个错误,说明(&#34;对象引用未设置为对象的实例。&#34;)请帮助我完全没有想法。我该如何解决这个问题?
答案 0 :(得分:0)
&#34; shoppingCart&#34;的会话密钥值为Nothing,因此当您尝试从userCart实例调用AddToCart函数时,您会收到此错误。您必须确保Session(&#34; shoppingCart&#34;)不是什么都不是。如果是,您应该创建它或执行您希望在该场景中执行的逻辑。请注意,在客户端处于非活动状态一段时间后(在Web.config文件中可配置),会话将超时,因此这是一个非常真实的场景。
Dim userCart As Cart = Nothing
If Not Session("shoppingCart") Is Nothing Then
userCart = CType(Session("shoppingCart"), Cart)
Else
userCart = New Cart
End If
userCart.AddToCart(pID, qty)
别忘了将购物车保存到会话中!
Session("shoppingCart") = userCart