在渲染_layout.cs文件之前设置ViewBag

时间:2015-02-11 14:36:48

标签: asp.net-mvc asp.net-mvc-5

是否可以在呈现_layout.cs文件之前设置ViewBag属性?我需要ViewBag来包含一个可用于呈现_layout的列表。我怎样才能做到这一点?

我听说过StartUp.cs,但我认为OWIN的用途并不能在这里使用,这是正确的吗?

1 个答案:

答案 0 :(得分:1)

您可以创建自定义ActionFilter来设置ViewBag属性。

public class CustomViewBagActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // either inject a property or use the filterContext
        //to get what data you need to use to set the ViewBag

        dynamic ViewBag = filterContext.Controller.ViewBag;
        ViewBag.Test = "test";
    }
}

然后您可以在FilterConfig.cs

中全局应用它
filters.Add(new CustomViewBagActionFilter());

或者你可以用它来装饰你的控制器或动作:

[CustomViewBagActionFilter]
public class HomeController : Controller

然后,您可以访问_Layout.cs文件中的ViewBag属性。只需确保检查null并根据ViewBag数据进行相应处理。