C# 如何在.Net MVC中为每个区域配置一个菜单以及布局的其他区域特定变量
我正在使用.NETMVC4开发一个相当大的应用程序,其中我有一个主菜单来浏览各个区域,还有一个子菜单来浏览一个区域的组件 很明显,每个区域的子菜单都不同,目前我已经使用Viewbag“解决”了这个问题 我有一个带有一些抽象方法的主控制器:C# 如何在.Net MVC中为每个区域配置一个菜单以及布局的其他区域特定变量,c#,razor,asp.net-mvc-4,asp.net-mvc-areas,C#,Razor,Asp.net Mvc 4,Asp.net Mvc Areas,我正在使用.NETMVC4开发一个相当大的应用程序,其中我有一个主菜单来浏览各个区域,还有一个子菜单来浏览一个区域的组件 很明显,每个区域的子菜单都不同,目前我已经使用Viewbag“解决”了这个问题 我有一个带有一些抽象方法的主控制器: public abstract class BaseController: Controller { protected abstract string GetMenu(); protected override sealed void On
public abstract class BaseController: Controller
{
protected abstract string GetMenu();
protected override sealed void OnResultExecuting(ResultExecutingContext filterContext)
{
ViewBag.Menu = GetMenu();
base.OnResultExecuting(filterContext);
}
}
每个区域也有其basecontroller,声明如下
public abstract class Area1Controller: BaseController
{
protected string GetMenu()
{
return "MenuNameForArea1";
}
}
在我的_布局中,我只需访问如下菜单:
@{
var menu = ViewBag.Menu as string;
if (menu != null)
{
Html.RenderPartial(menu);
}
}
现在的问题是,有相当多的变量加入了“需要在布局页面上显示的东西,但每个区域都不同”的行列
因此,我想知道解决这个问题的最佳办法是什么。我是否要为_布局页面创建ViewModel?我是将该ViewModel放入ViewBag中,还是强制每个ViewModel从基础ViewModel继承
由于每个区域都有其独立的_Viewstart,因此我曾想过使用节以一种类型安全的方式解决这个问题,但不幸的是,我似乎无法在_Viewstart中定义节
欢迎提出建议
奖金问题:什么是一个好的解决方案:
- 在主菜单中显示当前活动区域(每个区域配置一次)
- 在子菜单中显示当前活动项(每个控制器配置一次,但应可覆盖到特定项)