2009-03-04 22 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爲例。正如你所說,初始化並不是正確的方式。

相關問題