C# 为MVC中的每个视图提供自定义变量(设置)

C# 为MVC中的每个视图提供自定义变量(设置),c#,asp.net-mvc,C#,Asp.net Mvc,我想实现一个CMS,我想让一些设置可用于视图 这些设置可能是网站名称、公司名称,也可能是一些更复杂的项目 我希望这些在每个视图上都可用,而不使用强类型模型,比如ViewData ViewBag,但不必在每个操作中设置它 我认为我必须创建一个ControllerFactory,它将在每个CreateController上设置ViewBag 你认为这是解决这个问题的最好办法吗 在创建您自己的应用程序控制器并覆盖执行的操作。在那里,您可以在Viewbag中初始化自己的属性: public abstr

我想实现一个CMS,我想让一些设置可用于视图

这些设置可能是网站名称、公司名称,也可能是一些更复杂的项目

我希望这些在每个视图上都可用,而不使用强类型模型,比如ViewData ViewBag,但不必在每个操作中设置它

我认为我必须创建一个
ControllerFactory
,它将在每个
CreateController
上设置
ViewBag

你认为这是解决这个问题的最好办法吗



创建您自己的应用程序控制器并覆盖执行的操作。在那里,您可以在Viewbag中初始化自己的属性:

public abstract class ApplicationController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // set your ViewBag.Settings here
    }
}
创建从ApplicationController派生的所有控制器类:

public class HomeController : ApplicationController { ... }

现在,您可以从所有视图访问
ViewBag.Settings
,而无需在每个操作中明确设置此属性。

为什么不使用局部视图呢。因此,您只需在一个页面中即可配置所有视图信息。是否要硬编码设置?我希望用户能够改变自己的设置使用管理页面。我想他说的是使用视图内的视图。因此,你可以在内联视图上显示所有公共信息这是一个解决方案,但我必须从ApplicationController派生所有控制器,这是我想跳过的额外步骤。不,这没有错,但我希望有一些不需要维护的东西(将每个新控制器的基类更改为其他东西)。我认为
ControllerActionInvoker
是更好的选择,您只需创建一次,它就可以与
Controller
类协作