我正在使用MVC4并且我有一个问题,而不是声明ViewBag.MenuLevel =“twostage”;在我的控制器中的每个ActionResult中,我可以以某种方式为每个控制器声明它ONCE吗?现在例如我可以说每个控制器有40个ActionResults,这似乎很傻很多次要声明一个变量 - 所以我确信我错过了一些简单的东西。
我需要能够以某种方式在我的视图中使用它来影响演示。思考?楷模?对MVC有点新鲜,所以要温柔! ;)
基本上我希望每个部分(控制器)在前端显示不同的背景颜色,所以我想将部分/控制器打印到html中的id,这样我就可以通过css进行控制了。
干杯。
答案 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
。