Догадки моих сессионных ценностных конфликтов - PullRequest
0 голосов
/ 25 марта 2010

У меня есть веб-форма asp.net, которая будет отправлять информацию по электронной почте. Всякий раз, когда пользователь заполняет форму и нажимает кнопку «Отправить», введенная пользователем информация будет отправлена ​​по электронной почте.

Эта веб-форма имеет 4 страницы. но веб-форма не будет использовать все 4 страницы для всех запросов.

если пользователь выберет определенное значение на первой странице, форма пропустит 3-ю страницу и перейдет на последнюю 4-ю страницу (как ... стр. 1,2,4). Если это какие-либо другие значения, выбранные на первой странице. Форма будет перемещаться как страница 1, 2, 3, 4.

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

Показано ниже переменной декальрации:

Public strRoleType As String = String.Empty
Protected Shared isAreaSelected As Integer = 0
Protected Shared isStoreSelected As Integer = 0
Protected Shared isHeadOfficeSelected As Integer = 0
Protected Shared isRegionSelected As Integer = 0

Полагаю, проблема в переменной strRoleType, получает ли она значения от разных пользователей.

У кого-нибудь есть работа?

 Public Property storeSelected()
        Get
            Dim returnValue As Integer
            returnValue = Session("isStoreSelected")
            Return returnValue
        End Get
        Set(ByVal value)
            Dim outputValue As Integer = value
            Session("isStoreSelected") = outputValue
        End Set
    End Property





 Dim currentView As Int16
            currentView = mvRequestorForm.ActiveViewIndex
            If currentView = 3 And isStoreSelected = 1 Then
                mvRequestorForm.ActiveViewIndex = (currentView - 2)

            Else
                mvRequestorForm.ActiveViewIndex = (currentView - 1)
            End If

Ответы [ 2 ]

2 голосов
/ 25 марта 2010

Проблема в том, что ваши переменные объявлены как Shared, что означает, что они, в общем, распределены между пользователями. Вам нужно будет хранить эти значения таким образом, чтобы каждый пользовательский сеанс получал свой собственный набор значений (например, в переменной Session или около того).

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

If currentView = 3 And isStoreSelected = 1 Then

Вам также нужно прочитать это из состояния сеанса:

If currentView = 3 And Session("isStoreSelected") = 1 Then

Доступ к значению состояния сеанса предпочтительно должен быть заключен в некоторый метод или свойство.

1 голос
/ 25 марта 2010

В этом случае (с MultiView и обработкой навигации по странице в Postback) лучше удалить общие переменные и использовать свойства, которые ссылаются на ViewState, например:

        Public Property SelectedStore As Integer
            Get
                If (String.IsNullOrEmpty(ViewState("selectedStore")) Then
                    Return 0 'Default value
                Else
                    Return CInt(ViewState("selectedStore"))
                End If
            End Get
            Set (ByVal value As Integer)
                ViewState("selectedStore") = value
            End Set
        End Property

Таким образом, значение сохраняется во всех «страницах» навигации, которые вы можете получить и / или установить в своем коде, например так:

        If currentView = 3 And SelectedStore = 1 Then
            mvRequestorForm.ActiveViewIndex = (currentView - 2)
        Else
            mvRequestorForm.ActiveViewIndex = (currentView - 1)
        End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...