嘿所有,我是VB.net/ASP.net的新手,所以我需要一些帮助解决我目前遇到的问题。
我有一个ASCX.vb页面,允许用户从表中选择某人。一旦他们确实选择了某人,该页面就会将该人员信息重新加载到另一个表格下面的表格中,在那里他们可以为该人提交订单或删除该人员。
问题在于我想存储所选的用户ID,但似乎每次页面重新加载以显示更新时,它都会使我的数组再次变为默认值。
一旦他们选择了用户,这是我的代码:
Namespace prog.Controls
Partial Public Class progReportGrid
etc....
Public strIDArray() As String = {"0000770000"} 'Just a dummy place holder
Private Sub gvData_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvData.RowCommand
Dim idIndexNumber As Integer = Array.IndexOf(strIDArray, strID)
For i As Integer = 0 To strIDArray.Length - 1
System.Diagnostics.Debug.WriteLine(strIDArray(i))
Next
If idIndexNumber = -1 Then
ReDim Preserve strIDArray(strIDArray.Length)
strIDArray(strIDArray.Length) = strID
RaiseEvent EmployeeSelected(Me, New ESEventArgs(strID))
End If
End Sub
因此,每次页面重新加载公共strIDArray()As String = {“0000770000”} 再次被调用,当然,清除除0000770000之外保存的任何内容。
我怎样才能阻止它这样做?
更新
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
'do what?
End If
End Sub
大卫
答案 0 :(得分:3)
也许您对Web应用程序的无状态模型存在误解。任何未存储在ViewState或Session或共享应用程序变量中的内容都不会通过回发持续存在。
这意味着当你宣布你的时候
Public strIDArray() As String
作为标准变量,每次页面回发时都会重新初始化。
例如,这是一个简单的流程:
因为你的控件都是每次回发后重新实例化的,所以在将页面发送给用户之后,像strIDArray这样的类变量几乎被抛弃了。
相反,如果您希望页面记住数组上次回发的值,并在下一次回发时添加更多值,则必须使用ViewState或Session。
例如:
Private Property StrIDArray() As String()
Get
If ViewState("StrIDArray") Is Nothing
ViewState("StrIDArray") = New String() {"0000770000"}
Return ViewState("StrIDArray")
End Get
Set(ByVal value As String())
ViewState("StrIDArray") = value
End Set
End Property
现在,如果您使用此属性而不是变量,则可以操作该数组,只要用户在该页面上,该数组的值就会在回发中持续存在。
答案 1 :(得分:2)
在Page_Load方法中使用Page.IsPostBack
属性。
此属性在第一次加载页面时为false,之后每次回发都为false。
如果您在strIDArray() = {"0000770000"}
内设置了默认值If (Page.IsPostBack <> true)
,那么它就不会在回发中重置。
编辑:我的VB语法非常不稳定,但让我试一试
Partial Public Class EARNReportGrid
Begin
Public strIDArray() As String // DO NOT INITIALIZE it here. ONLY DECLARE IT
.....
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
//INITIALIZE the ARRAY
strIDArray = New String(){"00007700000"}
End If
End Sub
......
End