我有一个侧面板菜单,它在我的 asp.net mvc 4 app c# 中调用不同的控制器方法。
有一个顶部菜单需要根据输入的控制器进行更改。
我想知道根据按下的侧导航操作来更改顶部导航的好方法是什么。
一个例子是,如果我在左侧菜单上按管理员,那么顶部导航将只显示管理员选项。如果我按联系人,那么顶部菜单将更改为显示联系人的 crud 方法。
任何回复都会很棒
谢谢
我有一个侧面板菜单,它在我的 asp.net mvc 4 app c# 中调用不同的控制器方法。
有一个顶部菜单需要根据输入的控制器进行更改。
我想知道根据按下的侧导航操作来更改顶部导航的好方法是什么。
一个例子是,如果我在左侧菜单上按管理员,那么顶部导航将只显示管理员选项。如果我按联系人,那么顶部菜单将更改为显示联系人的 crud 方法。
任何回复都会很棒
谢谢
在考虑了这个问题后,我决定采用以下实现:我创建了两个局部视图,它们具有不同的菜单项,具体取决于选择的控制器。
我采取的步骤:
使用一个属性为我的布局创建了一个 ViewModel:
公共类 LayoutViewModel { 私有字符串 _menuNav;
public string MenuNav
{
get { return _menuNav; }
set { _menuNav = value != null ? value : "_HomeMenu"; }
}
}
然后在我的 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 : 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);
}
}
希望这可以帮助。
还有其他方法可以做到这一点,但都有其优点和缺点。只需做出决定并准备好在它无法正常工作时进行更改。