2013-05-08 71 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); 
    } 
    

    }

希望這有助於。

還有其他方法可以做到這一點,但所有的都有他們的親和騙局。只要做出決定,並準備好改變,如果它不能正常工作。

相關問題