allencoded
allencoded

Reputation: 7285

Getting an ASP.NET error System.NullReferenceException: Object reference not set to an instance of an object?

I am completely new to ASP.NET and VB as well as C#. I am trying to add customers to a contact list out of a DB. Then the list can be referenced to call them up.

But when I try to run it I get System.NullReferenceException: Object reference not set to an instance of an object. In line 19.

Here is my code:

Page 1 is default page...it connects to the database and grabs the contact information and allows me to select the current contact and add them to a listbox on a separate page:

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

The next bit of code allows me to add the contact to a list box:

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

The error occurs on line 19 (For Each customerEntry As DictionaryEntry In Customer) in the second set of code from the default2 class. Any ideas? I am completely new to ASP.NET just trying to learn. I more at home on PHP, Java, and Actionscript unfortunately.

Upvotes: 0

Views: 2189

Answers (1)

whudson05
whudson05

Reputation: 489

I think the problem is in this function

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

You initialise Customer here but then pull out of Session("Cart")

I think what you meant to do is

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

Now customer should always be initialised whereas before it might not have been which would cause the NullReferenceException that you are getting.

Upvotes: 1

Related Questions