2011-03-26 37 views

回答

14

你在找什麼是ActionFilter,然後覆蓋OnActionExecuting。這裏是追加當前登錄的用戶的ViewBag我ActionFilters之一:

public class AppendUserActionFilterAttribute : ActionFilterAttribute 
{ 
    ... 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     User currentUser = _sessionManager.CurrentUser; 

     dynamic viewBag = filterContext.Controller.ViewBag; 
     viewBag.CurrentUser = currentUser; 
    } 
    ... 
} 

然後你需要應用的屬性,無論你想這種情況的發生。如果將它附加到一個動作中,該動作將在ViewBag中獲得添加的條目。如果你將它附加到控制器上,它的所有動作都會得到它。如果你把它添加到一個基本的控制器,並有所有的控制器繼承它,然後在整個應用程序自己的行爲得到它

[AppendUserActionFilter] 
public class MyController : Controller { 

     public ActionResult Foo() { 
      .... 
     } 
} 
+0

ActionFilterAttribute存在於兩個名稱空間中:System.Web.Mvc和System.Web.Http.Filters。有什麼區別嗎?哪一個應該使用?我認爲這將有助於避免混淆新手(像我一樣)。 – 2014-05-07 09:47:19

3

一個可行的解決方案,可以通過構造函數分配控制器的

 

    public class HomeController : Controller 
    { 
     public HomeController() 
     { 
      ViewData["Common"] = "Some Data"; 
     } 
    } 
 

它將可用於HomeController中的所有操作

+0

這不起作用 – 2016-01-07 15:06:43

相關問題