0

这是我遇到的非常奇怪的错误,我会尽力解释。

我有两页 - 第 1 页(表格)和第 2 页(已完成的页面)

从第 1 页开始,我将一个变量放入数据库,然后执行 server.transfer 到第 2 页,如下所示...

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

然后在第 2 页上,我抓取paymentOnHold在第 1 页上设置的名为的变量并进入数据库...

这是我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

在我的数据库位于本地的开发环境中,数据库中的值和第 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 回答
1

这可能是在第一页(form-1)中保存视图状态的问题

在 asp.net 页面生命周期中

  1. Initalization (controls raise their Init event)
  2. Load ViewState (Only on post back)
  3. Load PostbackData 
  4. Load
  5. Raise PostbackEvent
  6. Save View State
  7. Render

Server.Transfer() 停止渲染当前页面并开始渲染另一个页面。这就是为什么 Server.Transfer() 不能用于重定向到另一台服务器提供的页面的原因。

如果您在 Event--> 6. Save View State 之前执行 Server.transfer,则您没有在 form-1 上保存 viewstate

解决方案

Response.redirect 和会话缓存,因为它旨在为每个用户和应用程序中的多个页面存在。

于 2013-08-12T15:34:17.663 回答