2010-02-04 11 views
1

假設您正在構建簡單的東西,比如用於處理名爲Customer的實體的數據輸入/ CRUD表單。也許你通過Session狀態傳遞CustomerID。你使用什麼構造/模式來訪問狀態?

我傾向於寫了很多相當樣板管道代碼各地處理該會話變量以特定方式。這些目標略有不同,但往往是一些類似:

  • 避免弄亂頁面與管道代碼
  • 操控後退按鈕智能
  • 拆除會話變量中的主流,堅持它儘快ViewState的防守對於那些國家沒有獲得通過,或丟失

你有處理這種情況最好的做法故障情況下

  • 碼?你有沒有在每個階段都能完美處理這個問題的課程?你是否直接調用會話變量?在這種情況下,你是否使用加密的QueryString並避免使用Session變量來完成後退按鈕的工作?

    最近我一直在使用屬性與會話變量。這裏有一個簡單的例子,我只是把在一起,但請記住,這將不會是很寬容的後退按鈕:

    Private ReadOnly Property CustomerID() As Integer 
        Get 
         If Me.ViewState(Constants.CustomerID) Is Nothing Then 
          If Me.Session(Constants.CustomerID) Is Nothing Then 
           Throw New ApplicationException("CustomerID was not persisted.") 
          Else 
           Me.ViewState(Constants.CustomerID) = Me.Session(Constants.CustomerID) 
           Me.Session.Remove(Constants.CustomerID) 
          End If 
         End If 
    
         Return Me.ViewState(Constants.CustomerID) 
        End Get 
    End Property 
    

    那麼,請問你的店處理呢?謝謝!

  • 回答

    1

    球隊,我對工作不會話各地通過主要它對網絡農場/花園困難的,因爲這種工作流信息。我們認爲會話是從用戶第一次訪問網站的那一刻起到他們離開的時間最相關的信息(如果不是全部的話)的容器。即便如此,如果該信息的檢索/構建成本非常高昂,我只會使用會話,並且只有當我知道負載均衡器會將用戶粘到某個服務器場中的特定服務器上,或者我們擁有合適的out-of-進程會話提供者就位。

    相反,我會通過查詢字符串,隱藏的輸入字段,或視圖狀態(如果啓用)通過這種類型的信息,並提供友好的錯誤處理時無效值發送。如果歷史管理很重要,我會利用ASP.NET AJAX history management

    +0

    只是好奇你的意思是通過隱藏的輸入字段或視圖狀態傳遞數據?我想你在談論跨頁面回發?我還沒有使用過。 –

    +0

    在這兩種情況下,我都在談論發佈到另一個URL。使用ASP.NET WebForms,這可能是使用ViewState的跨頁面回發。在ASP.NET MVC中,這可能只是一個簡單的HTML

    ,action屬性設置爲另一個URL,用'type = hidden'包含元素。在WebForms中,如果您擁有多頁面流程,則還可以使用圍繞智能用戶控件的嚮導或MultiView Web控件來將回發保留在同一頁面,並且無需將內容傳遞到其他頁面。 –

    相關問題