我创建了一个Base-Controller,所有控制器都从该控制器继承。目前这个控制器将一些数据(我在大多数视图中使用)填充到ViewData
- 容器中,如下所示:
protected override void Initialize(System.Web.Routing.RequestContext rc)
{
base.Initialize(rc);
ViewData["cms_configuration"] = new CmsConfiguration();
// etc.
}
我不喜欢我需要在视图中从ViewData读取(和转换)这一事实。我想介绍一个BaseViewModel,所有ViewModel都将从该BaseViewModel继承,定义属性而不是使用ViewData。但是我如何或在哪里填充BaseController中的BaseViewModel?有某种钩子吗?或者我只需要在BaseController中定义一个函数,我在Child-Controller中调用它?
E.g。 (儿童控制器:
//{...}
base.PopulateBaseView(MyView);
return View(MyView);
任何tipps的Thx。 sl3dg3
答案 0 :(得分:1)
您可以选择使用ActionFilters来执行以下操作:
查看这篇文章:
http://www.asp.net/mvc/tutorials/understanding-action-filters-cs
很好地解释了ActionFilters。这样,您可以将不同的填充逻辑分成不同的过滤器,并根据需要打开和关闭它们。