0

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

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

我想知道根据按下的侧导航操作来更改顶部导航的好方法是什么。

一个例子是,如果我在左侧菜单上按管理员,那么顶部导航将只显示管理员选项。如果我按联系人,那么顶部菜单将更改为显示联系人的 crud 方法。

任何回复都会很棒

谢谢

4

1 回答 1

0

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

我采取的步骤:

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

    公共类 LayoutViewModel { 私有字符串 _menuNav;

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

    }

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

    公共类 HomeIndexViewModel: LayoutViewModel {

}

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

    公共类 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. 向控制器操作方法添加了属性

    公共类 HomeController : Controller { [MenuAction("_HomeMenu")] public ActionResult Index() { var hm = new HomeIndexViewModel();

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

    }

希望这可以帮助。

还有其他方法可以做到这一点,但都有其优点和缺点。只需做出决定并准备好在它无法正常工作时进行更改。

于 2013-05-10T14:17:33.673 回答