2009-03-04 20 views
0

我从我的其他控制器继承具体的控制器方法之前返回的MVC的ActionResult被称为

public abstract class BaseController : Controller 
{ 
    protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 
     ... 
    } 
} 

在初始化过程中,我做了一些设置一个基本的控制器类,也有少数情况下,我想将执行过程缩短,直接跳到ActionResult的返回,完全跳过实际Action方法的执行。沿着这些线路

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
{ 
    base.Initialize(requestContext); 
    if(specialCase) 
    { 
     ViewData[...] = specialCaseInformation; 
     return View("~/Shared/SpecialCase.aspx"); 
    } 
} 

意图东西会跳过任何的ActionResult方法将被调用,并与我的全球特例页面替换它。但我不认为Initialize是为了这个。

认为我需要做的就是创建一个单独的ActionFilterAttribute类,覆盖OnActionExecuting方法,如果specialCase出现,构建一个ViewResult对象,并将其分配给filterContext.Result财产。

我正在朝着这个方向走吗,还是应该以不同的方式做这件事?

回答

0

是的,ActionFilterAttribute是完全正确的方式。以HandleErrorAttribute.cs为例。正如你所说,初始化并不是正确的方式。

相关问题