Данные клиента не передаются и не сохраняются в сеансе?

#asp.net #vb.net

#asp.net #vb.net

Вопрос:

По какой-то причине мой код не добавляет клиента в сеанс. Я новичок в ASP.NET есть ли у кого-нибудь какие-либо соображения относительно того, почему это происходит, и, возможно, он может привести какой-нибудь пример кода. Спасибо!

Под ним код.

 Imports System.Data

Partial Class _Default
    Inherits System.Web.UI.Page

    Private SelectedCustomer As Customer

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
            Handles Me.Load
        If Not IsPostBack Then
            ddlCustomers.DataBind()
        End If
        SelectedCustomer = Me.GetSelectedCustomer
        Me.DisplayCustomer()
    End Sub

    Private Function GetSelectedCustomer() As Customer
        Dim dvTable As dataview = CType(AccessDataSource1.Select( _
            DataSourceSelectArguments.Empty), dataview)
        dvTable.RowFilter = "CustomerID = " amp; ddlCustomers.SelectedValue
        Dim drvRow As DataRowView = dvTable(0)

        Dim customer As New Customer
        customer.CustomerID = CInt(drvRow("CustomerID"))
        customer.Name = drvRow("Name").ToString
        customer.Address = drvRow("Address").ToString
        customer.City = drvRow("City").ToString
        customer.State = drvRow("State").ToString
        customer.ZipCode = drvRow("ZipCode").ToString
        customer.Phone = drvRow("Phone").ToString
        customer.Email = drvRow("Email").ToString
        Return customer
    End Function

    Private Sub DisplayCustomer()
        lblAddress.Text = SelectedCustomer.Address
        lblCityStateZip.Text = SelectedCustomer.City amp; ", " _
                             amp; SelectedCustomer.State amp; " " _
                             amp; SelectedCustomer.ZipCode
        lblPhone.Text = SelectedCustomer.Phone
        lblEmail.Text = SelectedCustomer.Email
    End Sub


    Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        If Page.IsValid Then
            Dim customerItem As New Customer
            customerItem.Name = SelectedCustomer.ToString
            Me.AddToCustomer(customerItem)
            Response.Redirect("CustomerList.aspx")
        End If
    End Sub

    Private Sub AddToCustomer(ByVal customerItem As Customer)
        Dim customer As SortedList = Me.GetCustomer
        Dim customerID As String = SelectedCustomer.CustomerID
        If customer.ContainsKey(customerID) Then
            customerItem = CType(customer(customerID), Customer)
        Else
            customer.Add(customerID, customerItem)
        End If
    End Sub

    Private Function GetCustomer() As SortedList
        If Session("Customer") Is Nothing Then
            Session.Add("Customer", New SortedList)
        End If
        Return CType(Session("Customer"), SortedList)
    End Function

End Class
 

Вторая страница кода ниже:

 Partial Class Default2
    Inherits System.Web.UI.Page
    Private Customer As SortedList
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Customer = Me.GetCustomer
        If Not IsPostBack Then Me.DisplayCustomer()

    End Sub
    Private Function GetCustomer() As SortedList
        If Session("Customer") Is Nothing Then
            Session.Add("Customer", New SortedList)
        End If
        Return CType(Session("Customer"), SortedList)
    End Function
    Private Sub DisplayCustomer()
        lstCustomer.Items.Clear()
        Dim customerItem As Customer
        For Each customerEntry As DictionaryEntry In Customer
            customerItem = CType(customerEntry.Value, Customer)
            lstCustomer.Items.Add(customerItem.Name)
        Next
    End Sub

    Protected Sub lstCustomer_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles lstCustomer.SelectedIndexChanged

    End Sub

    Protected Sub Clearbtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Clearbtn.Click
        If Customer.Count > 0 Then
            Customer.Clear()
            lstCustomer.Items.Clear()
        Else
            clrErr.Text = "ERROR: NO CUSTOMERS STORED"
        End If
    End Sub
End Class
 

Ответ №1:

Я думаю, что я действительно ответил на это в другом из ваших вопросов

Вам нужно добавить строку, чтобы фактически сохранить обновленный объект customer обратно в сеанс, например

 Private Sub AddToCustomer(ByVal customerItem As Customer)
    Dim customer As SortedList = Me.GetCustomer
    Dim customerID As String = SelectedCustomer.CustomerID
    If customer.ContainsKey(customerID) Then
        customerItem = CType(customer(customerID), Customer)
    Else
        customer.Add(customerID, customerItem)
    End If
    Session("Customer") = customer
End Sub
 

Хотя я бы рекомендовал вам поместить это в другую функцию, чтобы ваш дизайн не зависел от сеанса, если вы захотите изменить его позже. Так что больше похоже

 Private Sub AddToCustomer(ByVal customerItem As Customer)
    Dim customer As SortedList = Me.GetCustomer
    Dim customerID As String = SelectedCustomer.CustomerID
    If customer.ContainsKey(customerID) Then
        customerItem = CType(customer(customerID), Customer)
    Else
        customer.Add(customerID, customerItem)
    End If
    StoreCustomer(customer)
End Sub

Private Sub StoreCustomer(ByVal customer As SortedList)
   Session("Customer") = customer
End Sub
 

На данный момент все локальные изменения для customer теряются сразу после вызова AddToCustomer, так как после этого вы выполняете перенаправление.

 Me.AddToCustomer(customerItem)
Response.Redirect("CustomerList.aspx")