这是非常奇怪的错误,我会尽力解释。
我有两页 - 第1页(表格)和第2页(已完成的页面)
从第1页开始,我将一个变量放入数据库,然后像第二页一样将server.transfer转到第二页......
Server.Transfer("Page2.aspx", True)
在第2页,我然后获取名为paymentOnHold
的变量,该变量在第1页上设置并进入数据库......
以下是我在第1页
上设置paymentOnHold
的方法
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秒 - 即使我没有重置它或任何东西?
这让我在过去的几个小时里疯狂了,无法正常工作。
有没有人对可能导致这种情况的原因有什么想法/建议?
提前致谢
答案 0 :(得分: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.Transfer
),Response.Redirect
值都可用。
答案 1 :(得分:1)
这可能是在第一页(表单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之前做Server.transfer - > 6.保存视图状态您没有在窗体1上保存视图状态
<强>解决方案强>
Response.redirect和会话缓存,因为它旨在存在于每个用户和应用程序中的多个页面。