昏暗的价值消失了vb.net

时间:2014-10-06 07:49:38

标签: vb.net code-behind

我正在尝试在代码中存储一个值,所以我不必用HiddenFields阻塞我的页面,但值'消失'

我假设它与范围或byval vs byref有关,但我不知道我需要如何才能使它工作。

我尝试做的是在我的Partial Class下创建Dim,在gridview.RowCommand中设置值,然后尝试在稍后的按钮处获取值。单击

Partial Class CustNSSF_MinSide
Inherits System.Web.UI.Page
Dim vr As New vrClass
Dim _ActNo As String

Sub GV_Relations_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles GV_Relations.RowCommand
  _ActNo = GV_Relations.DataKeys(index)("ActSeqNo")

 Protected Sub btn_lagre_Click(sender As Object, e As System.EventArgs) Handles btn_lagre.Click
            Dim test = _ActNo

2 个答案:

答案 0 :(得分:1)

该值消失,因为所有变量(或控件)都放置在每个页面生命周期的末尾。 GV_Relations_RowCommand仅在RowCommand上触发,btn_lagre_Click是另一种操作。您可以将此值存储在Session变量ViewStateHiddenField中(如您所见)。因此,当用户点击btn_lagre时,导致RowCommand的上一个操作是不同的回发,因此该变量为Nothing

所以使用HiddenField的一种方式(除ViewState aproach之外):

Private Property ActSeqNo As System.Int32
    Get
        If ViewState("ActSeqNo") Is Nothing Then
            ViewState("ActSeqNo") = System.Int32.MinValue
        End If
        Return DirectCast(ViewState("ActSeqNo"), System.Int32)
    End Get
    Set(value As System.Int32)
        ViewState("ActSeqNo") = value
    End Set
End Property

然后你可以用这种方式设置它:

Me.ActSeqNo = System.Int32.Parse(GV_Relations.DataKeys(index)("ActSeqNo")))

Nine Options for Managing Persistent User State in ASP.NET

答案 1 :(得分:0)

变量将在每Postback清除。您需要将其存储在ViewstateSession中。你可以这样做:

Property _ActNo As String 
    Get 
        Return ViewState("_ActNo")
    End Get 
    Set(ByVal value As String)
        ViewState("_ActNo") = value
    End Set 
End Property