如何在控制器中而不是为每个ActionResult声明一次变量

时间:2012-08-30 12:17:30

标签: asp.net-mvc razor

我正在使用MVC4并且我有一个问题,而不是声明ViewBag.MenuLevel =“twostage”;在我的控制器中的每个ActionResult中,我可以以某种方式为每个控制器声明它ONCE吗?现在例如我可以说每个控制器有40个ActionResults,这似乎很傻很多次要声明一个变量 - 所以我确信我错过了一些简单的东西。

我需要能够以某种方式在我的视图中使用它来影响演示。思考?楷模?对MVC有点新鲜,所以要温柔! ;)

基本上我希望每个部分(控制器)在前端显示不同的背景颜色,所以我想将部分/控制器打印到html中的id,这样我就可以通过css进行控制了。

干杯。

3 个答案:

答案 0 :(得分:3)

您每次都必须设置ViewBag数据,这是架构不可避免的功能。但是,您可以在控制器代码方面使用应用于控制器的属性使其更清晰一些。

public class ViewBagAttribute : ActionFilterAttribute
{
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var controller = filterContext.Controller;

        controller.ViewBag.MenuLevel = "twostage";
    }

    public void OnActionExecuted(ActionExecutedContext filterContext) { }
}

如果将该属性应用于控制器,则不必为每个Action方法显式添加ViewBag代码,因为每个Action方法都会自动调用OnActionExecuting

答案 1 :(得分:0)

您可以创建一个BaseController类,在其中定义共享字段和值。所有特定的控制器都继承自基类。

答案 2 :(得分:0)

创建自己的控制器类并从中继承所有控制器。使用您需要传递给此控制器类中所有视图的变量填充ViewBag