来源: [转载]ASP.NET MVC+JQueryEasyUI1.4+ADO.NET Demo – Dr_Hao – 博客园
DrHao.CMS整体参考源代码:链接:http://pan.baidu.com/s/1jHfpkmM%20 密码:f2t8
MVCBlog(ASP.NET MVC 4.0+EF 简单Demo) 链接:http://pan.baidu.com/s/1bkVvcU 密码:1c2f
Q:我在DrHao.CMS中定义一个BaseController控制器,代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.Web.Mvc;
6 using System.Web.Providers.Entities;
7
8 namespace DrHao.CMS.WebApp.Controllers
9 {
10 public class BaseController : Controller
11 {
12 //
13 // GET: /Base/
14 protected override void OnActionExecuting(ActionExecutingContext filterContext)
15 {
16 if (Session["UserInfo"]==null)
17 {
18 //没效果,还是会执行Action的方法
19 filterContext.HttpContext.Response.Redirect("/Login/Index");
20 }
21 base.OnActionExecuting(filterContext);
22 }
23
24 }
25 }
运行DrHao.CMS 直接访问 /Home/Index ,HomeController继承BaseController 代码如下:
1 using DrHao.CMS.Model;
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Web;
6 using System.Web.Mvc;
7
8 namespace DrHao.CMS.WebApp.Controllers
9 {
10 public class HomeController : BaseController
11 {
12 //
13 // GET: /Home/
14
15 public ActionResult Index()
16 {
17 UserInfo user = Session["UserInfo"] as UserInfo;
18 //user判断 正常情况下不需要写
19 if (user == null)
20 {
21 return Redirect("/Login/Index");
22 }
23 else
24 {
25 ViewBag.userLogin = user.UUserName;
26 return View();
27 }
28
29 }
30
31 }
32 }
正常情况下,在没有登陆当前用户的时候,直接访问/Home/Index,会执行BaseController中的 protected override void OnActionExecuting(ActionExecutingContext filterContext)方法,判断当前用户没有登陆,则直接跳转,不会执行/Home/Index Action中的方法,但实际运行效果,会继续执行/Home/Index中的方法(若在/Home/Index中不加入判断,则直接抛出异常信息,user不能为null)
1:直接访问/Home/Index View,执行代码如下:

2:判断当前Session[“UserInfo”]==null,执行跳转代码,但是还会继续执行base.OnActionExecuting(filterContext);方法

3:执行完BaseController中OnActionExecuting方法,则会继续执行HomeController控制器下的Index Action(按照我的理解不应该继续执行)


关于这点疑问,各位博友,有什么好的办法或者见解,帮我解惑一下,谢谢!
Mikel
