苏飞论坛

标题: 【分布式系统框架教程】-权限列表 [打印本页]

作者: songwenqi    时间: 2015-1-21 20:43
标题: 【分布式系统框架教程】-权限列表
【分布式系统框架教程】-权限列表

导读部分



1.【分布式系统框架】教程目录帖http://www.sufeinet.com/thread-10624-1-1.html

教程部分


   
由于权限的数据结构关系,因为有个层级关系,父类子类的这种关系,所以在提取的时候先将所有的父类列表提取过来。下面是后台代码:
[C#] 纯文本查看 复制代码
 funclist = bll.FindTopFuncList(pgindex, pageSize, out totalcounts);

这个funclist用到了分页,我处理的是提取的只是parentId=0的数据,也就是所有的父类权限。
下面是前台页面的提取循环代码:
[HTML] 纯文本查看 复制代码
 <table width="100%" border="0" id="listShow" cellpadding="4" cellspacing="1" bgcolor="#464646"
                                            class="newfont03">
                                            <tr bgcolor="#EEEEEE">
                                            <td width="5%" height="30">ID</td>
                                            <td width="5%">功能名称</td>
                                            <td width="5%">状态</td>   
                                            <td width="12%">操作</td>
                                            </tr>
                                            <% if (funclist.Any())
                                               {//循环之前首先将所有权限提取出来,供一下每次循环父类集合时调用,避免重复访问数据库
                                                   var funcalllist = bll.FindALL();
                                                   foreach (var f in funclist)
                                                   {
                                                   %>
                                            <tr bgcolor="#ffffcc">
                                            <td height="30"><%=f.ID%></td>
                                            <td>
                                            <a href="javascript:;" showid="<%=f.ID %>" class="btlink">
                                            <%=f.FunctionName%>
                                            </a>
                                            </td>
                                            <td><input type="checkbox" checked="<%=f.IsEnable%>"  disabled="disabled"/></td>
                                            <td><a href="AddFunction.aspx?id=<%=f.ID %>">编辑|</a>
                                               <a href="#" id="<%=f.ID %>" class="del">删除</a></td>
                                                
                                            </tr>
                                                    <%

                                                        var list = funcalllist.Where(func => func.ParentId == f.ID);
                                                        if (list.Any())
                                                        {
                                                            foreach (var s in list)
                                                            {         
                                                     %>
                                                              <tr bgcolor="#FFFFFF"  class="show<%=f.ID %>">
                                                              <td height="30"><%=s.ID%></td>
                                                              <td><%=s.FunctionName%></td>
                                                              <td><input type="checkbox" checked="<%=s.IsEnable%>"  disabled="disabled"/></td>
                                                              <td><a href="AddFunction.aspx?id=<%=s.ID %>">编辑|</a>
                                                              <a href="#" id="<%=s.ID %>" class="del">删除</a></td>
                                                              </tr>

                                            <%               }
                                                        }
                                                   }
                                               }%>
                                        </table>

    首先循环外层父类,每次循环时将该父类下的子类权限提取出来并显示出来,这样就可以显示出我们需要的层级关系了,很一目了然。    平常我们做循环的时候可能是每次循环父类的时候,都通过这个父类id从数据库中去取一下这个父类id下的所有子类。为了减少和数据库之间的多次访问,  在循环这个父类列表之前我用了一个findAll方法将所有的列表全部都提取过来了,这样做的好处是只需要提取一次,也就是说只需访问数据库一次,每次循环只是从这个列表中来进行linq查询,因为这个列表提取过来了是放在内存里面,在内存里查询可以说速度上快了很多,而且避免了重复的多次去访问数据库。
   得到的效果图如下:
(, 下载次数: 120)