添加新产品后,会话阵列列表将被覆盖

时间:2018-08-25 03:00:12

标签: asp.net .net

我的目标是创建一个购物车,单击链接时,它应该创建一个包含所有产品详细信息的新产品类。当查询字符串传递到购物车页面时,我已经创建了一个新的产品类,但是,如果我尝试向其中添加新产品(需要离开购物车页面),它似乎会被覆盖

我花了几天时间寻找答案,并尝试了所有我发现的人,但似乎都没有用。我在做什么错了?

这是我在购物车页面上的代码:

Partial Class ShoppingCartPage
Inherits Page
Dim shoppingCart = New ArrayList() 
Dim shoppingCartSession As String


Private Sub ShoppingCartPage_Load(sender As Object, e As EventArgs) Handles Me.Load
    If IsNothing(Session("shoppingCartSession")) Then
        shoppingCart = New ArrayList()
    End If
    shoppingCart.Add(New Product(Request.QueryString("ProductCode"), Request.QueryString("ProductName"), Request.QueryString("Category"), Val(Request.QueryString("Price")), Request.QueryString("Description")))
    Session("shoppingCartSession") = shoppingCart
    Me.TextBox1.Text = shoppingCart.Item(0).ToString & " count: " & shoppingCart.Count

End Sub

End Class

我试图将全局变量设置为

Dim shoppingCart = Session("ShoppingListSession")

但是它给了我这个错误:

  

System.Web.HttpException:'会话状态只能在以下情况下使用   在配置文件中或在配置文件中将enableSessionState设置为true   在Page指令中。还请确保   System.Web.SessionStateModule或自定义会话状态模块是   包含在   应用程序配置。'

即使我的Web配置中有<configuration>\<system.web>\<httpModules>,并且在两个适用的页面上都有sessionState mode="InProc" timeout="20",我仍然遇到此错误。

2 个答案:

答案 0 :(得分:0)

问题出在以下行

  

Session(“ shoppingCartSession”)= shoppingCart

您正在将shoppingCart字段分配给会话项,并且每次您导航到页面时都会创建该字段,因此该字段将覆盖会话数据,因此 您可以尝试类似的操作(只需直接添加到会话项中即可)

Private Sub ShoppingCartPage_Load(sender As Object, e As EventArgs) Handles Me.Load
    If IsNothing(Session("shoppingCartSession")) Then
    shoppingCart = New ArrayList()
    Session("shoppingCartSession") = shoppingCart
    End If
Session("shoppingCartSession").Add(New Product(Request.QueryString("ProductCode"), Request.QueryString("ProductName"), Request.QueryString("Category"), Val(Request.QueryString("Price")), Request.QueryString("Description")))
Me.TextBox1.Text = shoppingCart.Item(0).ToString & " count: " & shoppingCart.Count

希望这会有所帮助

答案 1 :(得分:0)

所以这似乎已经解决了。当我回到购物车页面时,我将当前会话添加回数组中。

Private Sub ShoppingCartPage_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not (IsPostBack) Then
        If Not (Request.QueryString.ToString().Length.Equals(0)) Then

            If Session("shoppingCartSession") Is Nothing Then
                shoppingCart = New ArrayList()
                shoppingCart.Add(New Product(Request.QueryString("ProductCode"), Request.QueryString("ProductName"), Request.QueryString("Category"), Val(Request.QueryString("Price")), Request.QueryString("Description")))
                Session("shoppingCartSession") = shoppingCart
            Else
                shoppingCart = CType(Session("shoppingCartSession"), ArrayList)
                shoppingCart.Add(New Product(Request.QueryString("ProductCode"), Request.QueryString("ProductName"), Request.QueryString("Category"), Val(Request.QueryString("Price")), Request.QueryString("Description")))
                Session.Add("shoppingCartSession", shoppingCart)
            End If
            Me.TextBox1.Text = shoppingCartSession
            End If

    End If

End Sub