user1342164
user1342164

Reputation: 1454

Items.Count returning 0 for a list box

I am trying to use the code below to store the items from the list into a session. For some reason when I debug the code the count is returning 0 even though there are multiple items in the list box? Any ideas what I am doing wrong here?

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    NameTextBox_AutoCompleteExtender.OnClientItemSelected = "getSelected"
End Sub

 Protected Sub cmdNext_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles cmdNext.Click
    Dim n As Integer = NPListbox.Items.Count
    Dim arr As String() = New String(n - 1) {}
    For i As Integer = 0 To arr.Length - 1
        arr(i) = NPListbox.Items(i).ToString()
    Next
    Session("arr") = arr

    Response.Redirect("~/frmDescription.aspx")
End Sub 


 <script language="javascript" type="text/javascript">
       function getSelected(source, eventArgs) {
      var s = $get("<%=NameTextBox.ClientID %>").value;

      var opt = document.createElement("option");
      opt.text = s.substring(s.length - 10);
      opt.value = s.substring(s.length - 10);

      document.getElementById('<%= NPListbox.ClientID %>').options.add(opt);

  }

Upvotes: 1

Views: 1072

Answers (1)

Karl Anderson
Karl Anderson

Reputation: 34844

I am going to guess that you do not have any logic in your Page_Load to populate the listbox, based upon what it had when you finished the autocomplete extender logic. Since, you do not, then when the click event fires after the Page_Load your values are gone.

Put the logic that executes on selection of the autocomplete extender in a method and have your Page_Load call that, like this:

Protected Sub Page_Load(sender As Object, e As EventArgs)
    ' Put call here to populate the listbox results from autocomplete extender selection
    PopulateListBox()
End Sub

Private Sub PopulateListBox()
    ' Go to whatever resource you are using to get the values for the list box
End Sub

UPDATE:

Since you are depending upon using a client-side function to grab the values from the autocomplete extender and populating the listbox that way, you need to mimic that logic in your Page_Load on the server-side, because it will be too late if you try to use the client-side one, since you need the data server-side and all of the server-side events happen before the client-side logic in a server post back.

You need to do something like this:

Protected Sub Page_Load(sender As Object, e As EventArgs)
    ' Only do this when page has posted back to the server, not the first load of the page
    If IsPostBack Then
        ' Put call here to populate the listbox results from autocomplete extender selection
        PopulateListBox()
    End If
End Sub

Private Sub PopulateListBox()
    ' Get value from text box
    Dim textBoxValue As String = Me.NameTextBox.Text

    ' Create new item to add to list box
    Dim newItem As New ListItem(textBoxValue)

    ' Add item to list box and set selected index
    NPListbox.Items.Add(newItem)
    NPListbox.SelectedIndex = NPListbox.Items.Count - 1
End Sub

Upvotes: 2

Related Questions