переменная сеанса, установленная флажком, не сохраняется / не передается со страницы на страницу - PullRequest
0 голосов
/ 28 сентября 2011

У меня есть просмотр списка, который показывает длинный список.Каждый предмет имеет возможность быть «скрытым» или нет.Я хочу, чтобы флажок либо показывал весь список, либо не показывал скрытые.Идея состоит в том, что пользователи будут скрывать старые элементы, которые они больше не хотят видеть, но могут захотеть увидеть в какой-то момент.Я хочу сохранить значение этого решения в переменной сеанса, поэтому, если пользователь переходит на другую страницу, а затем возвращается, ShowAllCheckbox будет предварительно заполнять то, что ранее решил пользователь.Все работает хорошо, за исключением того, что я не могу сохранить переменную сессии.Он продолжает возвращаться к ложному.Вот что у меня есть:

Страница aspx:

Show Hidden: <asp:Checkbox ID="ShowHiddenCheckbox" runat="server" AutoPostBack="True" OnCheckedChanged="ShowHiddenCheckboxChange" />
...
<asp:ListView ...>
<!-- this list works fine, and pulls the correct records -->

Страница aspx.vb:

Protected Sub ShowHiddenCheckBoxChange(ByVal sender As Object, ByVal e As EventArgs)
    ' toggle the values
        Dim CheckBoxField As CheckBox = TryCast(sender, CheckBox)
        If CheckBoxField.Checked Then
            Session("ShowHiddenRotations") = False
        Else
            Session("ShowHiddenRotations") = True
        End If

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    'if i navigate to another page, and come back to this one, this comes back as "False".  I don't understand how it could be reset to False.
    Response.Write( "Session: " & Session("ShowHiddenRotations") )

    'when page loads check if session variable has been set to show/hide the hidden rotations
    If Session("ShowHiddenRotations") Then

        If Session("ShowHiddenRotations") = True Then
            'update sql query on select statement to show the hidden rotations

            'update checkbox to show it as checked
            ShowHiddenCheckBox.Checked = True
        Else
            ShowHiddenCheckBox.Checked = False
        End If
    Else
        'not checked by default (ie don't show hidden)
        ShowHiddenCheckBox.Checked = False
    End If

End Sub

Переменная Session всегда возвращается к False при переходе кеще одну страницу и вернитесь к этому.Мое понимание переменных сеанса состояло в том, что они будут передавать свои значения с одной страницы на другую, пока пользователь не закроет браузер.Может быть, есть другой способ сделать это, или что-то простое, что мне не хватает.Любая помощь высоко ценится!Спасибо!

1 Ответ

0 голосов
/ 28 сентября 2011

Включено ли состояние сеанса на вашем сайте?Его можно отключить несколькими способами, на уровне страницы или даже в файле web.config.

Вы также должны знать, что событие Page_Load запускается для каждого запроса, прежде чем произойдет автоматическая обратная передача флажка.Я также немного сбит с толку относительно того, что вы пытаетесь сохранить: я предполагаю, что в каждой строке есть флажок, но кажется, что вы пытаетесь сохранить значение set / not-set в одной переменной сеанса.Как вы различаете, какие были выбраны, а какие нет?:)

Обновление: Хорошо, давайте попробуем немного очистить код.Сначала создайте свойство для доступа к значению сеанса:

Private Property ShowHiddenRotations As Boolean
  Get
    If Not Session("ShowHiddenRotations") Is Nothing Then
      Return CType(Session("ShowHiddenRotations"), Boolean)
    Else
      Return False
    End If
  End Get
  Set(value As Boolean)
    Session("ShowHiddenRotations") = value
  End Set
End Property

Если вы используете это значение на других страницах, я бы порекомендовал переместить его в отдельный класс.

Тогда мы можем уменьшить ваш другой код до чего-то более близкого к этому:

Protected Sub ShowHiddenCheckBoxChange(ByVal sender As Object, ByVal e As EventArgs)
  ShowHiddenRotations = ShowHiddenCheckbox.Checked
End Sub

И ...

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load   
  If not Page.IsPostBack
      ' Load your data, better stick it in a seperate sub...
      ShowHiddenCheckBox.Checked = ShowHiddenRotations
  else
      ' This section is executed BEFORE any control methods are run, i.e. ShowHiddenCheckBoxChange
  end if
End Sub

Я полагаю, что ваша проблема действительно простопорядок, как вещи называются на вашей странице.Что происходит, когда вы отлаживаете через него?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...