0

これは私が得ている本当に奇妙なエラーです。できる限り説明しようと思います。

ページ 1 (フォーム) とページ 2 (完成したページ) の 2 つのページがあります。

1ページ目から変数をデータベースに入れ、2ページ目にserver.transferを実行します...

Server.Transfer("Page2.aspx", True)

2ページ目で、paymentOnHold1ページ目で設定された変数を取得し、データベースに入力します...

これが私paymentOnHoldがページ1に設定する方法です

Public Property paymentOnHold() As String
    Get
        Dim _paymentOnHold As Object = ViewState("paymentOnHold")
        If _paymentOnHold IsNot Nothing Then
            Return CType(_paymentOnHold, String)
        Else
            Return Nothing
        End If
    End Get
    Set(ByVal value As String)
        If Not String.IsNullOrEmpty(value) Then
            ViewState("paymentOnHold") = value
        Else
            ViewState("paymentOnHold") = Nothing
        End If
    End Set
End Property

...

paymentOnHold = Date.Now.ToString("yyyyMMddHHmmss")

2ページ目の値を取得する方法は次のとおりです...

Dim myValue As String

 If TypeOf PreviousPage Is Page1 Then

        myValue = DirectCast(PreviousPage, Page1).paymentOnHold

End If

データベースがローカルである私の開発環境では、DB の値と 2 ページの値は両方とも一致します - ご想像のとおり...

ライブ環境では、DB 値はページ 2 の値とは (前に) 3 秒または 4 秒異なります。

これは、過去数時間私を夢中にさせており、うまくいきません。

これを引き起こしている可能性があるものについて、誰かアイデア/提案はありますか?

前もって感謝します

4

2 に答える 2

1

この方法で使用ViewStateすることは脆弱な解決策です。ViewStateそれが開始されたページの範囲外に存在することを意図していないため、ましてやページ間で渡されることはほとんどありません。それ。

Sessionキャッシュはユーザーごとに存在し、複数のページ要求にまたがることが意図されていたため、より良いアプローチはキャッシュを使用することです。

これを試して:

に保存するにはSession、次の操作を行います。

Session("PaymentOnHold") = [Date].Now.ToString("yyyyMMddHHmmss")

から値を取得するにはSession、次のようにします。

' First check to see if the value is in Session cache or not
If Session("PaymentOnHold") IsNot Nothing Then
    ' Everything in Session cache is stored as an object so you need to cast it to get it out
    Dim datePaymentOnHold As DateTime = TryCast(Session("PaymentOnHold"), DateTime)
End If

これで、ページ (または)Sessionへの移動方法に関係なく、値を使用できるようになります。Server.TransferResponse.Redirect

于 2013-08-12T14:38:36.903 に答える