在MVC中更改控制器时如何呈现不同的导航

时间:2013-05-08 20:46:10

标签: asp.net-mvc-4

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

根据输入的控制器,有一个顶级菜单需要更改。

我想知道更改顶部导航的好方法是什么,具体取决于按下操作的侧导航。

例如,如果我按左侧菜单上的Admin,则顶部导航将仅显示管理员选项。如果按“联系人”,则顶部菜单将更改为显示联系人的crud方法。

任何回复都会很棒

由于

1 个答案:

答案 0 :(得分:0)

在考虑了这个问题之后,我决定采用以下实现:我创建了两个部分视图,这些视图具有不同的菜单项,这取决于选择哪个控制器。

我采取的步骤:

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

    公共类LayoutViewModel {     private string _menuNav;

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

    }

  2. 然后在我的homeviewmodel上添加了一个基类(注意没有其他类型被定义为用于演示目的)

    public class HomeIndexViewModel:LayoutViewModel {

  3. }

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

      public class 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;
      }
      

      }

    2. 为控制器操作方法添加了属性

      public class HomeController:Controller {     [MenuAction( “_ HomeMenu”)]     公共ActionResult索引()     {         var hm = new HomeIndexViewModel();

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

      }

    3. 希望这有帮助。

      还有其他方法可以做到这一点,但所有人都有他们的专业和骗局。如果它不能正常工作,只需做出决定并准备好改变。