簡體   English   中英

Page_Load 的 MVC 等價物

[英]MVC Equivalent of Page_Load

我的 MVC 應用程序中設置了一個 session 變量。 每當 session 過期並且用戶嘗試刷新他們所在的頁面時,頁面將拋出錯誤,因為 session 不再設置。

在加載視圖之前,有什么地方可以檢查 session 是否已設置? 也許在 Global.asax 文件中放一些東西?

我可以在每個 ActionResult 的開頭做這樣的事情

public ActionResult ViewRecord()
{
    if (MyClass.SessionName == null)
    {
        return View("Home");
    }
    else
    {
        //do something with the session variable
    }
}

除了這樣做還有其他選擇嗎? 在這種情況下,最佳做法是什么?

如果它在一個 controller 中,您可以這樣做:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting(filterContext);
    ... // do your magic
}   

它會在執行任何動作之前觸發。 你不能從那里返回一個視圖,你必須重定向到任何返回操作結果的東西,例如:

filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Shared" }, { "action", "Home" } });

但是,顯然,這應該重定向到不受覆蓋影響的 controller 中的操作,否則您將進行循環重定向。 :)

首先,您應該重定向到主頁,而不是返回主頁視圖,否則盡管 Url 在其他地方,您仍會出現主頁的奇怪情況。

其次,Session 永遠不會是 Null,因為當舊的過期或重置時會創建一個新的 session。 你會檢查你的變量,如果它是 null,那么你知道 session 是新的。

第三,如果你的應用程序依賴於這個 session 數據,那么我根本不會使用 session。 你用它來緩存數據嗎? 如果是這樣,那么使用緩存可能是更好的選擇(當緩存項過期時,您的應用程序會收到通知)。

不幸的是,這可能是XY 問題的一個例子。 你有問題,你相信 Session 解決了你的問題,但你遇到了 Session 的不同問題,所以你問的是如何解決你的 session 問題,而不是如何解決 Session 試圖解決的問題。

你試圖用這個解決的真正問題是什么?

編輯:

根據您在下面的評論,您為什么不通過 url 上的客戶編號:

http://website/Controller/ViewRecord/3

public ActionResult ViewRecord(int id) 
{ 
    // do whatever you need to do with the customer ID
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM