获取ASP.NET错误System.NullReferenceException:对象引用未设置为对象的实例?

时间:2011-10-30 19:36:05

标签: asp.net vb.net

我是ASP.NET和VB以及C#的新手。我正在尝试将客户添加到数据库中的联系人列表中。然后可以引用列表来调用它们。

但是当我尝试运行它时,我得到System.NullReferenceException:对象引用未设置为对象的实例。第19行。

这是我的代码:

第1页是默认页面...它连接到数据库并抓取联系信息,并允许我选择当前联系人并将其添加到单独页面上的列表框中:

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 = " & 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 & ", " _
                             & SelectedCustomer.State & " " _
                             & 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("Cart"), 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
End Class

错误发生在default2类的第二组代码中的第19行(For Each customerEntry As DictionaryEntry In Customer)中。有任何想法吗?我只是想学习,对ASP.NET来说是全新的。不幸的是,我更喜欢PHP,Java和Actionscript。

1 个答案:

答案 0 :(得分:1)

我认为问题在于此功能

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

您在此初始化客户,但随后退出会话(“购物车”)

我认为你打算做的是

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

现在客户应该始终被初始化,而在它之前可能不会导致你得到的NullReferenceException。