Asp.net mvc 4 在MVC中更改控制器时,如何呈现不同的导航

Asp.net mvc 4 在MVC中更改控制器时,如何呈现不同的导航,asp.net-mvc-4,Asp.net Mvc 4,我有一个侧面板菜单,在我的asp.net mvc 4应用程序c#中调用不同的控制器方法 有一个顶部菜单,需要根据输入的控制器进行更改 我想知道什么是一个很好的方法来改变顶部导航取决于什么侧导航被按下的行动 例如,如果我按下左侧菜单上的Admin,则顶部导航将仅显示Admin选项。如果我按Contacts,则顶部菜单将更改为显示Contacts的crud方法 任何回复都很好 谢谢在考虑了这个问题后,我决定采用以下实现方式:我创建了两个局部视图,根据选择的控制器,它们具有不同的菜单项 我采取的步骤:

我有一个侧面板菜单,在我的asp.net mvc 4应用程序c#中调用不同的控制器方法

有一个顶部菜单,需要根据输入的控制器进行更改

我想知道什么是一个很好的方法来改变顶部导航取决于什么侧导航被按下的行动

例如,如果我按下左侧菜单上的Admin,则顶部导航将仅显示Admin选项。如果我按Contacts,则顶部菜单将更改为显示Contacts的crud方法

任何回复都很好


谢谢

在考虑了这个问题后,我决定采用以下实现方式:我创建了两个局部视图,根据选择的控制器,它们具有不同的菜单项

我采取的步骤:

  • 使用一个属性为我的布局创建了ViewModel:

    公共类布局视图模型 { 私有字符串(menunna)

    public string MenuNav
    {
        get { return _menuNav; }
        set { _menuNav = value != null ? value : "_HomeMenu"; }
    }       
    
    }

  • 然后在my homeviewmodel上添加了一个基类(注意,没有为演示目的定义其他类型)

    公共类HomeIndexViewModel:LayoutViewModel {

  • }

  • 创建一个属性,允许我将此新属性添加到控制器,以便它获得正确的导航局部视图

    公共类MenuActionAttribute:ActionFilterAttribute { 私有字符串_MenuName

    public MenuActionAttribute(string MenuName)
    {
        _MenuName = MenuName;
    }
    
    public override void  OnActionExecuted(ActionExecutedContext filterContext)
    {
        var lvm = filterContext.Controller.ViewData.Model as LayoutViewModel;
    
        lvm.MenuNav = _MenuName;
    }
    
    }

  • 向控制器操作方法添加了属性

    公共类HomeController:控制器 { [菜单操作(“主页菜单”)] 公共行动结果索引() { var hm=新的HomeIndexViewModel()

    }

  • 希望这有帮助

    有其他方法可以做到这一点,但都有自己的优点和缺点。只要做出决定,并准备好改变,如果它不能正常工作

        return View(hm);
    }
    
    [MenuAction("_HRMenu")]
    public ActionResult About()
    {
        var hm = new HomeIndexViewModel();
    
        return View(hm);
    }