2011-03-25 67 views
0

我有一個MVC應用程序,它根據內部靜態IP地址設置一些會話變量。會話變量不保存在初始頁面加載

我已經構建了一個ApplicationController來覆蓋MVC中的OnActionExecuted子部分,以便在整個應用程序中使用該數據。

但是,下面的代碼只是我代碼的一部分,但是對於我的帖子進行了編輯,但部分代碼無法使用。在初始頁面加載時,會話變量不會被保存,而是在頁面刷新後。我遇到的問題是這些需要保存在初始頁面加載。

If Session("Item1") = Nothing Then 
       If IpAddressShort <> "" Then 
        Dim locInfo = cmsRepository.GetInfoBasedOnLocation(IpAddressShort).SingleOrDefault() 

        If locInfo IsNot Nothing Then 
         Session("Item1") = locInfo.Item1 
         Session("Item2") = locInfo.Item2 
         Session("Item3") = locInfo.Item3 
         Session("Item4") = locInfo.Item4 

         If locInfo.Item2= "1" Then 
          Session("Visibility") = 3 
          Session("TypeShort") = "XXXX" 
         ElseIf locInfo.Item2= "2" Then 
          Session("Visibility") = 4 
          Session("TypeShort") = "YYYY" 
         ElseIf locInfo.Item2= "9" Then 
          Session("Visibility") = 2 
          Session("TypeShort") = "ZZZZZ" 
         End If 

        End If 
       End If 
      End If 

從理論上說,如果我是正確的,如果沒有Session("Item1")集/如果Session("Item1")是空的,那麼代碼段的其餘部分應運行,並設置這些變量。

這是怎麼沒有在第一次頁面加載時設置這些變量?

感謝提前

回答

1

任何幫助,我認爲你是確定,因爲你不能從你的操作方法中訪問它的會話數據不存在。

如果是這種情況,請嘗試覆蓋OnActionExecuting,而不是在操作方法之前調用它。在操作方法之後調用OnActionExecuted

0

的文檔OnActionExecuted狀態:

調用操作方法後調用。

在您最初的調用中,數據不存在,因爲操作尚未完成執行。他尚未運行,因爲它在您的操作完成後會運行。第二次出現,因爲OnActionExecuted已經從最後一個動作開始運行。

你想要的是,其中列明瞭OnActionExecuted

調用操作方法之前調用。

這會發生在您的動作代碼之前,因此第一次執行動作時會先發生,然後您的動作代碼會觸發。

這是一個偉大的文章,解釋了ASP.NET MVC的生命週期:

http://blog.stevensanderson.com/2007/11/20/aspnet-mvc-pipeline-lifecycle/