Кнопка перестает функционировать при попытке назначить переменную сеанса - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь сохранить список строк после нажатия кнопки и использую переменные сеанса. Это фрагмент кода:

.aspx page

<asp:Panel runat="server" ID="pnlAdd" >
     <asp:DropDownList runat="server" ID="ddlOrder" >
          <asp:ListItem Value="-1">Select an Order Type</asp:ListItem>
          <asp:ListItem Value="1">hey there</asp:ListItem>
     </asp:DropDownList>
     <asp:DropDownList runat="server" ID="ddlOrderStatus" >
          <asp:ListItem Value="-1">Select an Order Status</asp:ListItem>
          <asp:ListItem Value="1">another option</asp:ListItem>
     </asp:DropDownList>
</asp:Panel>
<br />
<asp:Button runat="server" ID="btnAdd" Text="Add" />

.vb page

Protected Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
        Dim list As New List(Of String)

        list = Session("flist")
        list.Add(ddlOrder.SelectedItem.Text + " " + ddlOrderStatus.SelectedItem.Text)
        Session("flist") = list

        For i As Integer = 0 To 10
            MsgBox(i.ToString + "  " + list(i))
        Next

        MsgBox("Here")
 End Sub

В тот момент, когда я присваиваю Session переменную list с list = Session("flist"), ничего не произойдет при нажатии кнопки. Если я удаляю эту строку, остальная часть кнопки срабатывает. Я неправильно использую переменную Session? Как я могу добиться этого правильно?

1 Ответ

1 голос
/ 23 марта 2020

Список (из String) не может быть ничем, прежде чем вы собираетесь добавить элементы в этот список, поэтому измените свой код следующим образом:

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click

    Dim list As New List(Of String)
    Dim objList As Object = Session.Item("flist")

    If objList IsNot Nothing AndAlso TypeOf (objList) Is List(Of String) Then
        list = CType(objList, List(Of String))
    End If

    list.Add(ddlOrder.SelectedItem.Text + " " + ddlOrderStatus.SelectedItem.Text)
    Session("flist") = list

    For i As Integer = 0 To list.Count - 1
        MsgBox(i.ToString + "  " + list(i))
    Next

    MsgBox("Here on end")

End Sub
...