【分布式系统框架教程】-权限列表
由于权限的数据结构关系,因为有个层级关系,父类子类的这种关系,所以在提取的时候先将所有的父类列表提取过来。下面是后台代码:
[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查询,因为这个列表提取过来了是放在内存里面,在内存里查询可以说速度上快了很多,而且避免了重复的多次去访问数据库。
得到的效果图如下:
|