2011-12-23 21 views
1

我需要在每個ActionResult中運行某個函數,並在必要時返回某個值。如何在每個ActionResult方法中運行一些代碼並在必要時返回結果?

假設這個函數的名字是A()。我可以手動執行此操作:

ActionResult Index() { 
    if (...) return A(); 
    ... 
} 

ActionResult About() { 
    if (...) return A(); 
} 

或者,我可以使用Initialize()方法:

override void Initialize(RequestContext r) { 
    A(); // Can't do a return here 
} 

但問題是,由於它是無效我不能返回ActionResult值。

有沒有辦法做到這一點?

回答

1

你可以用Action Filters來做到這一點。

public class MyActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (...) { 
      // modify filterContext as needed 
     } 
    } 
} 

那麼你可以添加到[MyActionFilter]控制器和/或動作

+0

感謝。看起來像我需要的東西。我該如何返回某個ActionResult(例如RedirectToAction())? – Alex 2011-12-23 03:27:33

+0

您使用'filterContext.Result = new RedirectResult(url)'。看看[this](http://stackoverflow.com/a/5453371/291687)回答更多示例。 – Lester 2011-12-23 03:40:53

+0

完美的作品!在控制器本身重寫此方法將允許自動修改此控制器的所有操作的上下文結果。 – Alex 2011-12-23 03:57:44

相關問題