读书人

当右键刷新时为什么ViewState的值会

发布时间: 2012-02-16 21:30:36 作者: rapoo

当右键刷新时,为什么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 

读书人网 >asp.net

热点推荐