日期:2014-05-16  浏览次数:20543 次

MVC项目后台管理,各页面判断登陆问题。
用户已成功登陆,并转至管理首页的控制器;但后台页面较多,难道要在每个页面中都进行判断用户是否登陆?

能不能像asp.net一样,建一个基类,基类中重写onLoad方法,后台每个页去继承这个基类,这样很方便。

但在MVC下,我建了一个BaseController用于判断用户是否登陆,后台其它Controller都继承这个BaseController,但如何让后台的每个控制器执行时都先执行BaseController中的某个Action?


或者有什么更好的方法?
------解决方案--------------------
public class BaseController : Controller
    {
        protected string hostUrl = "";
        /// <summary>
        /// Action执行前判断
        /// </summary>
        /// <param name="filterContext"></param>
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            // url
            this.hostUrl = "http://" + this.Request.Url.Host;
            this.hostUrl += this.Request.Url.Port.ToString() == "80" ? "" : ":" + this.Request.Url.Port;
            this.hostUrl += this.Request.ApplicationPath;

            if (!this.checkLogin())// 判断是否登录
            {
                filterContext.Result = RedirectToRoute("Default",new{ Controller = "Login", Action = "Index" });
            }

            base.OnActionExecuting(filterContext);

        }


        /// <summary>
        /// 判断是否登录
        /// </summary>
        protected bool checkLogin()
        {
            if (this.Session["userinfo"] == null)
            {
                return false;
            }
            return true;
        }

    }