当右键刷新时,为什么ViewState的值会丢失?
我在Page_Load里取得session中的值,把值保存到ViewState,然后清除session,但当我点击右键刷新时,ViewState的值却丢失了,如何能清除session而且当页面刷新时还能保留住原有的值,ViewState能做到吗?还请各位高手赐教。代码如下:
If Not IsNothing(Session.Item("Item_1")) Then
ViewState("2030") = Session.Item("Item_1")
Session.Remove("Item_1")
End If
Dim f As String = ViewState("2030")
------解决方案--------------------做不到。
不明白为什么要清除session
------解决方案--------------------或许你可以把seesion的值附加到url后边,不用viewstate
------解决方案--------------------
做不到ViewState回发后保存内容
刷新后就没了
一定要用ViewState就象办法只回发不刷新
------解决方案--------------------
ViewState 只在postback的过程中持久化。
------解决方案--------------------
“右键刷新”时,浏览器拿出上一次页面提交的数据重复提交,这其中就包括上一个页面提交时的ViewState值。
我看不出你的“把值保存到ViewState”的道理。这是错误的举措。如果你为了解决“Session丢失”问题,那么应该使用“状态服务器”管理应用程序状态,或者放弃Session自己写代码把页面值写入数据库或者xml文件(当然此时要区分SessionID来区分不同的客户端会话)。
ViewState是页面状态,Session是会话状态,一个会话中可能有1个或者无数个页面,页面触发的顺序不定。把Session数据保存到ViewState中从逻辑上就错误了。
------解决方案--------------------VB.NET code
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsNothing(Session.Item("Item_1")) Then
ViewState("2030") = Session.Item("Item_1")
Session.Remove("Item_1")
End If
Dim f As String = ViewState("2030")
Response.Write(f)
End Sub
Protected Sub SetSession()
Session("Item_1") = "ttt"
End Sub