2011-03-26 41 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

相关问题