Asp.net MVC3.0 基于不同的角色显示不同的菜单
前面提到過用Asp.net MVC3.0正在做一個問答系統性質的論壇。前期把菜單全部顯示以方便測試模塊功能。現在正在完善,加上角色模塊,然后不同的角色登陸系統會看到不同的菜單欄,還有就是游客(未登錄用戶)看到的菜單欄。網上也搜到了幾篇關于動態顯示菜單的文章,不是很喜歡,動態顯示菜單,我感覺不如靜態的爽快,而且動態的從數據庫中取出菜單項,本身就是耗時間的事情,加上寫在數據庫中還需要維護,而且菜單也沒那么多,都是一定的,也不需要動態擴展,決定用靜態的。
? ? ?由于后臺都是自定義的AuthorizeAttribute和Role,所以不能用Asp.net MVC3.0內置的User.IsInRole()和Roles.IsUserInRole()來判斷登陸用戶的角色信息。所以只能自己添加了。
? ? ?所做項目的菜單是在Layout中顯示的,所以先在Layout中稍作修改,這是一個小例子,將
<div id="menucontainer"><ul id="menu"><li>@Html.ActionLink("Home", "Index", "Home")</li><li>@Html.ActionLink("About", "About", "Home")</li></ul> </div>改為
<div id="menucontainer"><ul id="menu">@{Html.RenderAction("你的菜單Action名字", "你的菜單Controller名字");}</ul> </div>其中@Html.RenderAction是通過Controller中的Action來調用用戶控件,將Action對應的View當做Partial部分顯示在調用處。
然后建立對應的菜單的Controller和Action。(你也可以先建立菜單Controller和Action)
分別命名為TestMenuController和Menu。
using System.Collections.Generic; using System.Web.Mvc;namespace test.Controllers {public class TestMenuController : Controller{//// GET: /TestMenu/public ActionResult Menu(){List<Role> _testroles = new List<Role>();/*根據User.Instance.Name或者你登陸的時候將你的用戶信息放入Session中,取出,然后根據用戶, 獲取你自己定義的role信息*///將角色名稱放入List<string>中List<string> roles = new List<string>();return PartialView(roles);}} }建立對應的Menu.cshtml,選中PartialView。
在Menu.cshtml中加入如下代碼
@model IEnumerable<string> @{this.Layout = null; } @if(Model.Count()>0&&Model.Contains("角色名稱")){你想要顯示的菜單; } ....................此處省略,大體代碼如此,自己寫。差不多就這樣子了。如果要求菜單動態擴展的話,那也很容易改。同樣的道理。
轉載于:https://www.cnblogs.com/tianzibobo/archive/2013/01/07/role_menu.html
總結
以上是生活随笔為你收集整理的Asp.net MVC3.0 基于不同的角色显示不同的菜单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WEB效能测试和负载测试部分截图
- 下一篇: LoadRunner如何监控Linux下