2013-05-08 26 views
0

我有一个侧面板菜单,它在我的asp.net mvc 4应用程序c#中调用不同的控制器方法。如何在MVC中更改控制器时呈现不同的导航

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

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

一个例子是,如果我在左侧菜单上按管理员,那么顶部导航将只显示管理员选项。如果我按通讯录,则顶部菜单将更改为显示联系人的垃圾邮件方法。我创建了不得不依赖于所选择控制器不同的菜单项两个部分观点:

思考问题,我决定对下列实施后的任何答复将是巨大的

感谢

回答

0

步骤我把:

  1. 创建一个视图模型为我的布局,一个属性:

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

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

    }

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

    公共类HomeIndexViewModel:LayoutViewModel {

}

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

    public class MenuActionAttribute:ActionFilterAttribute { private string _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:控制器 { [MenuAction( “_ HomeMenu”)] 公共的ActionResult指数() { 变种hm = new HomeIndexViewModel();

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

    }

希望这有助于。

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

相关问题