我有一个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
答案 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