| 【通用权限管理系统】角色管理>分配菜单页面逻辑处理导读部分 
 
 
 
 
 教程部分 
 
 本帖子主要讲解权限管理>角色管理>分配菜单的页面列表实现方法,稍后会在其它帖子中,详细讲解分配菜单的保存方法实现。 
 1. 在角色管理中,点击分配菜单按钮 2. 点击分配菜单按钮后,出现分配菜单的页面,本次主要讲解的就是分配菜单页面的实现逻辑,如下图: 由此图可以看到,本次分配的菜单信息,主要是给基本员工的角色分配,在页面的左上角,可以清晰的看到分配菜单的角色信息。 一下是代码部分讲解: 1. 分配菜单按钮的html实现如下: [C#] 纯文本查看 复制代码 <td><a href="/Sys/RoleMenu.aspx?roleId=<%=roleInfo.RoleID %>&name=<%=roleInfo.Name %>" class="btn btn-success btn-small">分配菜单</a></td>此处可以看到,主要是个a链接,在链接中有两个参数,roleId(角色id),(角色名称)name(角色名称) 此两个参数,主要是在分配菜单页面使用 2. 分配菜单页面cs逻辑实现如下:      1. 参数实例化 [C#] 纯文本查看 复制代码  private Sys_MenuBLL sys_menuBll = new Sys_MenuBLL();
        private Sys_MenuInRoleBLL sys_menuInRoleBll = new Sys_MenuInRoleBLL();
        protected List<Sys_MenuInfo> parentMenuList = new List<Sys_MenuInfo>();
        protected List<Sys_MenuInfo> sonMenuList = new List<Sys_MenuInfo>();
        protected List<Sys_MenuInRoleInfo> rmlist = new List<Sys_MenuInRoleInfo>();
        protected List<int> menuIdList = new List<int>();
        protected int roleId = 0;
        protected string roleName = string.Empty;     2. Page_Load 中页面数据绑定实现如下: [C#] 纯文本查看 复制代码 protected void Page_Load(object sender, EventArgs e) {
            var action = this.Request.Params[ "action" ];
            roleId = InputHelper.GetInputInt( this.Request.Params[ "roleId" ] );
            roleName = this.Request.Params[ "name" ];
            // 权限判断,没有权限,直接返回
            if (!LoginUser.IsAssignPermission(10))
            {
                Response.Write("您暂无分配菜单的权限");
                Response.End();
                return;
            }
            if ( string.IsNullOrWhiteSpace( action ) ) {
                //初始化 加载数据
                /*
                 * 1. 获取所有菜单信息(包括主导航)
                 * 2. 获取所有主导航
                 * 3. 获取所有子导航
                 * 4. 获取当前角色的菜单分配信息
                 */
                // 获取所有导航信息
                var menuList = sys_menuBll.GetList( "", "", "" );
                // 获取所有主导航信息,赋值给 parentMenuList
                parentMenuList = menuList.Where( m => m.ParentID == 0 ).ToList();
                // 获取所有子导航信息,复制给 sonMenuList
                sonMenuList = menuList.Where( m => m.ParentID != 0 ).ToList();
                // 获取当前角色的菜单分配信息
                rmlist = sys_menuInRoleBll.GetList( "", string.Format( "RoleID = {0}", roleId ), "" );
                menuIdList = rmlist.Select( r => r.MenuID ).ToList();
            } 
        }在此处可以看到,添加了是否有权限的限制,即代码: [C#] 纯文本查看 复制代码 // 权限判断,没有权限,直接返回
            if (!LoginUser.IsAssignPermission(10))
            {
                Response.Write("您暂无分配菜单的权限");
                Response.End();
                return;
            }如果没有权限,页面会直接输出,在页面上显示如下内容: ‘您暂无分配菜单的权限’ 
 在Page_Load中,页面初始化数据,绘制页面html需要的数据处理如下: [C#] 纯文本查看 复制代码 if ( string.IsNullOrWhiteSpace( action ) ) {
                //初始化 加载数据
                /*
                 * 1. 获取所有菜单信息(包括主导航)
                 * 2. 获取所有主导航
                 * 3. 获取所有子导航
                 * 4. 获取当前角色的菜单分配信息
                 */
                // 获取所有导航信息
                var menuList = sys_menuBll.GetList( "", "", "" );
                // 获取所有主导航信息,赋值给 parentMenuList
                parentMenuList = menuList.Where( m => m.ParentID == 0 ).ToList();
                // 获取所有子导航信息,复制给 sonMenuList
                sonMenuList = menuList.Where( m => m.ParentID != 0 ).ToList();
                // 获取当前角色的菜单分配信息
                rmlist = sys_menuInRoleBll.GetList( "", string.Format( "RoleID = {0}", roleId ), "" );
                menuIdList = rmlist.Select( r => r.MenuID ).ToList();
            } 主要为如上代码中所述的4步
 * 1. 获取所有菜单信息(包括主导航)
 * 2. 获取所有主导航
 * 3. 获取所有子导航
 * 4. 获取当前角色的菜单分配信息
 详细代码如上。
 
 分配菜单,页面html如下:
 
 [C#] 纯文本查看 复制代码 <div class="si-main">
    <div class="si-block">
        <div class="si-form">
            <table class="table-form table">
                <tbody>
                    <tr>
                        <td align="left"><h4><%=roleName %></h4></td>
                    </tr>
                </tbody>
            </table>
            <table class="table table-page" id="grid">
                <thead>
                    <tr>
                        <td align="center" style="width:30%">主导航</td>
                        <td align="center" style="width:20%">操作</td>
                        <td align="center" style="width:50%">二级导航(勾选二级导航时请务必勾选它所在的主导航,否则系统将不会显示,切记)</td>
                    </tr>
                </thead>
                <tbody>
                    <%foreach (var menuInfo in parentMenuList)
                      { %>
                    <tr >
                        <td align="center">
                            <label for="like<%=menuInfo.MenuID %>" class="form-check" data-scheck>
                                <input type="checkbox" id="like<%=menuInfo.MenuID %>" name="like" value="<%=menuInfo.MenuID %>"  <%=(menuIdList.Contains(menuInfo.MenuID) ? "checked=\"checked\"" : string.Empty ) %> data-value=<%=menuInfo.MenuID %>>
                                <span class="check-icons"><i class="icon icon-check"></i> <i class="icon icon-uncheck">
                                    </i> </span><%=menuInfo.MenuName %>
                            </label>
                        </td>
                        <td align="center">
                            <a href="javascript:;" class="toggle" >查看|设置菜单</a>
                        </td>
                        <td>
                            <%var sonList = sonMenuList.Where(m => m.ParentID == menuInfo.MenuID); %>
                            <ul id="UL<%=menuInfo.MenuID %>" style="display:none">
                               <%if( sonList != null && sonList.Any() ){
                                    foreach (var sonMenu in sonList)
                                    {%>
                                    <li>
                                     <label for="Checkbox<%=sonMenu.MenuID %>" class="form-check" data-scheck>
                                        <input type="checkbox" id="Checkbox<%=sonMenu.MenuID %>" name="menuChild" value="<%=sonMenu.MenuID %>" <%=(menuIdList.Contains(sonMenu.MenuID) ? "checked=\"checked\"" : string.Empty ) %> data-value="<%=menuInfo.MenuID %>"/>
                                        <span class="check-icons"><i class="icon icon-check"></i> <i class="icon icon-uncheck">
                                            </i> </span><%=sonMenu.MenuName%>
                                    </label>
                                    </li>
                                <%}} else{%>
                                    <li style="color:Red">暂无子菜单项</li>
                                <%}%>
                            </ul>
                        </td>
                    </tr>
                    <%
                        } %>
                    <tr>
                        <td colspan="3" align="center">
                               
                        </td>
                    </tr>
                    <tr>
                        <td colspan="3" align="center">
                            <button class="btn btn-primary" id="btnSave">保存</button>
                            <button class="btn btn-cancel" id="btnCancle">取消</button>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
</div>
 实现效果如下所示:
 
 获取所有菜单信息,并将该角色原有的菜单信息选中
 
 点击查看|设置菜单按钮,展开子菜单js如下:
 
 [C#] 纯文本查看 复制代码 $('#grid').on('click', '.toggle', function () {
            var $this = $(this);
            $this.parent().next().find('ul').toggle();
            $this.parents('tr').siblings().find('ul').hide();
        })
 以上即为分配菜单页面html列表实现的过程
 
 |