我有一個MVC2 web應用程序,其中我剛剛實現了一些會話超時代碼。在Global.asax
中,我添加了一個Session_End
處理程序,該處理程序檢查記錄是否打開進行編輯,如果是,則向外部系統發出Web服務調用以回滾存儲庫中的記錄,以便它不鎖定在「用於編輯'狀態。記錄仍然顯示在用戶的瀏覽器中,因爲我們無法將消息推送到瀏覽器來關閉記錄。當用戶接下來與(現在超時)頁面交互時,例如,要刷新,取消,保存或提交,Web應用程序會看到用戶未登錄(會話已過期,因此登錄名隨之一起),然後重定向到登錄頁面。如何從Global.asax獲取數據到MVC視圖
在登錄頁面上,我想顯示一條消息,解釋用戶重定向的原因,如下所示:「您的會話超時;請重新登錄;如果您有記錄打開,則會恢復到先前的狀態狀態。」
問題:從Global.asax
,我可以在哪裏存儲消息,以便登錄控制器或視圖可以在我們重定向時找到它?我似乎無法在Global.asax
中獲得對ViewData
的參考。當我引用它想:
System.Web.Mvc.ViewPage<My...LoginViewModel>.ViewData["ErrorMessage"] = "Your session timed out..."
我得到一個錯誤:
An object reference is required for the non-static field, method, or property 'System.Web.Mvc.ViewPage<My...LoginViewModel>.ViewData.get'
就是我試圖可能的,我只是不知道引用ViewData
正確的方式,或者是ViewData
無法訪問Global.asax
?在這種情況下,將Global.asax
的消息設置爲在視圖中顯示的最佳選擇是什麼?
它爲什麼需要在Global.asax中? – SLaks
我不認爲你的解決方案是可能的。您如何知道某條消息是針對特定用戶的?由於它們沒有有效的會話,它們是不是被FormsAuthentication重定向到登錄頁面? – Dallas
@SLaks,AFAIK Session_End處理程序需要在Global.asax中,因爲它是由單獨的工作進程觸發的,而不是我的主應用程序的進程,所以我無法在我的應用程序類中捕獲它。我錯了嗎? – Val