[英]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.