2013-09-11 5 views
1

Я пытаюсь использовать приведенный ниже код для хранения элементов из списка в сеанс. По какой-то причине, когда я отлаживаю код, счетчик возвращает 0, хотя в списке есть несколько элементов? Любые идеи, что я делаю неправильно здесь?Items.Count возвращает 0 для списка

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); 

    } 

+0

'NPTextbox' является' ListBox'? – SWeko

+0

Да, извините, у меня изначально было текстовое поле, поэтому я сохранил его с тем же именем, что и я его изменил – user1342164

+0

Где вы заполняете ListBox? –

ответ

1

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

Поместите логику, которая выполняется на выборе автозаполнения удлинителя в методе и ваш Page_Load вызов, который, как это:

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:

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

Вам нужно сделать что-то вроде этого:

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 
+0

Привет, я написал выше, что я делаю на странице загрузки. – user1342164

+0

Что находится в 'getSelected'? –

+0

Я добавил его выше – user1342164

Смежные вопросы