<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
當需要跨頁面共用資訊的時候,Session是首當其衝的選擇,最典型的例子就是:在處理登入和購物車邏輯的時候需要用到Session。在MVC中,可以把處理Session的邏輯放在一個泛型基控制器中,但需要注意的是:在判斷沒有登入就跳轉到登入頁的時候,需要把出錯控制器和登入控制器排除在外。
using System.Collections.Generic; using System.Web.Mvc; using System.Web.Routing; namespace MvcApplication1.Controllers { public class BaseController<TModel> : Controller { private const string loginSession = "LoginSession"; private const string shoppingCartSession = "ShoppingCartSession"; private const string errorController = "Error"; private const string LoginController = "Login"; private const string LoginAction = "Login"; //沒有登入的跳轉到登入頁 protected override void Initialize(RequestContext requestContext) { base.Initialize(requestContext); //如果沒有登入,且不是出錯和登入控制器就跳轉到登入頁 if (!NoNeedSessionController(requestContext) && !HasLoginSession()) { GoToAction(requestContext, Url.Action(LoginAction, LoginController)); } } //對哪些不需要依賴快取的控制器 返回true private bool NoNeedSessionController(RequestContext requestContext) { //從路由資料中取到當前controller的名稱 var c = requestContext.RouteData.Values["controller"].ToString().ToLower(); //把不需要依賴Session的控制器名稱放到列表中 var noNeedSessionList = new List<string> { errorController.ToLower(), LoginController.ToLower() }; return noNeedSessionList.Contains(c); } //跳轉到某個檢視 private void GoToAction(RequestContext requestContext, string action) { requestContext.HttpContext.Response.Clear(); requestContext.HttpContext.Response.Redirect(action); requestContext.HttpContext.Response.End(); } //登入的時候判斷是否有Session protected bool HasLoginSession() { return Session[loginSession] != null; } //判斷購物車是否有Session protected bool HasShoppingCartSession() { return Session[shoppingCartSession] != null; } //從Session中獲取登入模型的範例 protected TModel GetLoginModelFromSession() { return (TModel)this.Session[loginSession]; } //從Session中獲取購物車模型的範例 protected TModel GetShoppingCartModelFromSession() { return (TModel)this.Session[shoppingCartSession]; } //設定登入Session protected void SetLoginSession(TModel loginModel) { Session[loginSession] = loginModel; } //設定購物車Session protected void SetShoppingCartSession(TModel shoppingCartModel) { Session[shoppingCartSession] = shoppingCartModel; } //讓登入Session失效 protected void AbandonLoginSession() { if (HasLoginSession()) { Session.Abandon(); } } //讓購物車Session失效 protected void AbandonShoppingCartSession() { if (HasShoppingCartSession()) { Session.Abandon(); } } } }
讓其他控制器派生於基控制器:
using System.Web.Mvc; using MvcApplication1.Models; namespace MvcApplication1.Controllers { public class LoginController : BaseController<LoginModel> { public ActionResult Index() { //把登入模型範例儲存到Session中 LoginModel loginModel = new LoginModel(); SetLoginSession(loginModel); //從Session中獲取登入模型範例 LoginModel sessioModel = GetLoginModelFromSession(); //使登入Session失效 AbandonLoginSession(); return View(); } } }
到此這篇關於ASP.NET MVC在基控制器中處理Session的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45