写这篇东西源于一个问题:
问题描述
在一个Action中加入TempData["message"] = this.dialog.GetValue("NoLogin"),转到另一个Action时没有取到TempData["message"] 值。
[RolesFilterAttribute]
public ActionResult ModifyUser() { AccountInfo userInfo = ViewData["FilterUserInfo"] as AccountInfo; if (userInfo != null) { ............................
在需要的方法上贴触发器:/// <summary> /// 用户查询页面(Get) /// </summary> /// <returns></returns> [RolesFilterAttribute]
[HttpGet] public ActionResult SearchUser() { AccountInfo accountInfo = ViewData["FilterUserInfo"] as AccountInfo; Result<SearchResult<List<AccountInfo>>, string> result; if (accountInfo == null) { TempData["message"] = this.dialog.GetValue("NoLogin"); return RedirectToAction("Error", "Common"); } ............................其他代码省略
} }
说明:RolesFilterAttribute 实现接口IAuthorizationFilter ;下面是简单实现代码:
#region IAuthorizationFilter 成员 void IAuthorizationFilter.OnAuthorization(AuthorizationContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (!this.AuthorizeCore(filterContext)) { filterContext.Result = new ViewResult() { ViewName = "Error"}; } } private bool AuthorizeCore(AuthorizationContext filterContext) { AccountInfo account = userSystem.CheckLogin(); if (account != null) { if ((account.Power & Role) > 0) { return true; } return false; } return false; } #endregion
出现问题:TempData["message"] = this.dialog.GetValue("NoLogin"); 没有提示信息没有到达错误页面。这是为什么呢?我们知道:TempData只存放一次数据,到第三个Action时,第一个Action存放的数据就失效了(TempData的特性就是可以在两个Action之间传递数据,它会保存一份数据到下一个Action,并随着再下一个Action的到来而失效)。现在只是从SeachUser -->E
MVC 3 TempData深入研究(跳转Action中没有取TempData的思考)
最新推荐文章于 2020-06-27 20:21:17 发布