2010-12-07 72 views
2

我需要訪問Web應用程序頁面中的一些變量。變量的範圍就在特定的頁面中。 哪一個是解決方案?會話或ViewState?或者更好的解決方案?ASP.NET中的頁面範圍變量

Private Property UserId() As Integer 
      Get 
       If Not ViewState("UserId") Is Nothing Then 
        Return CType(ViewState("UserId"), Integer) 
       Else 
        Return -1 
       End If 

      End Get 
      Set(ByVal Value As Integer) 
       ViewState("UserId") = Value 
      End Set 
     End Property 

Private Property UserId() As Integer 
    Get 
     If Not Session("UserId") Is Nothing Then 
      Return CType(Session("UserId"), Integer) 
     Else 
      Return -1 
     End If 

    End Get 
    Set(ByVal Value As Integer) 
     Session("UserId") = Value 
    End Set 
End Property 

,也是每個用戶的ViewState的習慣嗎?

+1

爲什麼你需要這樣做,你需要從一個請求到另一個請求嗎? – 2010-12-07 02:20:05

+1

另外,請勿以這種方式格式化您的代碼。離開「>」,選擇整體並按下「1/0/1」工具。 – 2010-12-07 02:20:33

回答

7

如果您打算在多個頁面上存儲用戶獨有的信息,那麼Session是一個不錯的選擇。 Cookie用於將用戶綁定到給定的Session,並且Sessions將超時,這是要記住的。

ViewState只是HTML中的一個隱藏字段,因此可以在頁面發回自己時用於保留對象。缺點是你將數據序列化爲一個字符串併發送給客戶端(它在回發後進行驗證,所以篡改它會引發異常)。要回答你的問題,是的,ViewState是每個用戶每頁。

如果您需要存儲您的站點的所有用戶訪問的數據,那麼Application存儲或HttpContext.Cache是有用的。

這只是一個快速總結,關於您的選項的更詳細描述,請查看ASP.NET State Management Overview