我的会话值猜测冲突

时间:2010-03-25 10:05:05

标签: .net asp.net vb.net session

我有一个asp.net网络表单,它将以电子邮件形式提交信息。每当用户填写表单并单击“提交”按钮时,用户输入的信息将以电子邮件形式发送。

此网页表格有4页。但是Web表单不会在所有请求中使用全部4页。

如果用户在第一页中选择特定值,表单将绕过第3页并进入最后4页(如... page1,2,4)。如果是第一页中选择的任何其他值。表单将导航为page1,2,3,4。

所以现在我的问题是当多个用户访问同一个网站时,第一页中的值得到了来自不同用户的组合,并且表单会异常行为。有时它会绕过有时它不会绕过page3

以下显示的是变量decalrations:

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 个答案:

答案 0 :(得分:2)

问题在于您的变量被声明为Shared,这意味着它们在用户之间共享。您需要以每个用户会话获得自己的一组值的方式存储这些值(例如在Session变量中)。

<强>更新
当您在会话状态中存储值时,在决定是否显示视图时,您会读取共享变量

If currentView = 3 And isStoreSelected = 1 Then

您还需要从会话状态中读取此内容:

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

最好将对Session状态值的访问封装在某个方法或属性中。

答案 1 :(得分:1)

在这种情况下(使用MultiView并处理回发中的“页面”导航),最好删除共享变量并使用链接到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