我正在使用VB后端在asp.net中构建一个非常简单的购物车,但我遇到了代码问题。当我运行我的应用程序并尝试将产品添加到购物车时,我收到一条错误消息。
Object reference not set to an instance of an object.
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
来源错误:
Line 27: Dim blnMatch As Boolean = False
Line 28:
Line 29: For Each Me.objDR In objDT.Rows
Line 30: If objDR("StockItemName") = Product Then
Line 31: objDR("Quantity") += txtQuantity.Text
我不确定为什么会这样做,并希望有人可以看看并提供一些建议?我已检查过我的代码,但我找不到任何错误,但我会采取任何可能的指导。
这是我的代码。
Shoppingcart.aspx
<asp:DropDownList id="ddlProducts" runat="server">
袜子
裤子
衬衫
帽子
数量:
总:
Shoppingcart.aspx.vb 导入System.Data 部分公共类购物车 继承System.Web.UI.Page
Dim objDT As System.Data.DataTable
Dim objDR As System.Data.DataRow
Private Sub Page_Load(ByVal s As Object, ByVal e As EventArgs)
If Not IsPostBack Then
makeCart()
End If
End Sub
'Mark Cart function
Function makeCart()
objDT = CType(Session("Cart"), DataTable)
objDT.Columns.Add("StockID", GetType(Integer))
objDT.Columns("StockID").AutoIncrement = True
objDT.Columns("StockID").AutoIncrementSeed = 1
objDT.Columns.Add("StockItemName", GetType(String))
objDT.Columns.Add("StockItemValue", GetType(Decimal))
Session("Cart") = objDT
End Function
'This is for adding items to the shopping cart.
Sub AddToCart(ByVal s As Object, ByVal e As EventArgs)
objDT = Session("Cart")
Dim Product As String = ddlProducts.SelectedItem.Text
Dim blnMatch As Boolean = False
For Each Me.objDR In objDT.Rows
If objDR("StockItemName") = Product Then
objDR("Quantity") += txtQuantity.Text
blnMatch = True
Exit For
End If
Next
If Not blnMatch Then
objDR = objDT.NewRow
objDR("Quantity") = txtQuantity.Text
objDR("StockItemName") = ddlProducts.SelectedItem.Text
objDR("StockItemValue") = Decimal.Parse(ddlProducts.SelectedItem.Value)
objDT.Rows.Add(objDR)
Session("Cart") = objDT
End If
dg.DataSource = objDT
dg.DataBind()
End Sub
Function GetItemTotal() As Decimal
Dim intCounter As Integer
Dim decRunningTotal As Decimal
For intCounter = 0 To objDT.Rows.Count - 1
objDR = objDT.Rows(intCounter)
decRunningTotal += (objDR("StockItemValue") * objDR("Quantity"))
Next
Return decRunningTotal
End Function
Sub Delete_Item(ByVal s As Object, ByVal e As DataGridCommandEventArgs)
objDT = Session("Cart")
objDT.Rows(e.Item.ItemIndex).Delete()
Session("Cart") = objDT
dg.DataSource = objDT
dg.DataBind()
lblTotal.Text = "$" & GetItemTotal()
End Sub
结束班
答案 0 :(得分:0)
我复制了你的代码并运行了几次并将其解决了。 在初始页面加载会话(“购物车”)什么都没有。向DataTable添加新列时导致对象引用错误。
将DataTable设置为会话(“购物车”),如下所示:
objDT = CType(Session("Cart"), DataTable)
会给它一个没有价值的东西。相反,在初始页面加载中执行此操作:
objDT = New Data.DataTable
在设置了会话(“购物车”)之后,可以像以前一样将数据表设置为会话(“购物车”)。
整个功能:
Function makeCart()
objDT = New Data.DataTable
objDT.Columns.Add("StockID", GetType(Integer))
objDT.Columns("StockID").AutoIncrement = True
objDT.Columns("StockID").AutoIncrementSeed = 1
objDT.Columns.Add("StockItemName", GetType(String))
objDT.Columns.Add("StockItemValue", GetType(Decimal))
Session("Cart") = objDT
End Function