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("角色名稱")){
     你想要顯示的菜單;
}
....................此處省略,大體代碼如此,自己寫。

差不多就這樣子了。如果要求菜單動態擴展的話,那也很容易改。同樣的道理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM