Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.Net MVC中为每个区域配置一个菜单以及布局的其他区域特定变量_C#_Razor_Asp.net Mvc 4_Asp.net Mvc Areas - Fatal编程技术网

C# 如何在.Net MVC中为每个区域配置一个菜单以及布局的其他区域特定变量

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

我正在使用.NETMVC4开发一个相当大的应用程序,其中我有一个主菜单来浏览各个区域,还有一个子菜单来浏览一个区域的组件

很明显,每个区域的子菜单都不同,目前我已经使用Viewbag“解决”了这个问题

我有一个带有一些抽象方法的主控制器:

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中定义节

欢迎提出建议

奖金问题:什么是一个好的解决方案:

  • 在主菜单中显示当前活动区域(每个区域配置一次)
  • 在子菜单中显示当前活动项(每个控制器配置一次,但应可覆盖到特定项)

您可以使用MvcSiteMap进行此检查