• 页面根据XML里权限动态生成菜单


    1.XML文件,分为大标题与小标题,文档中层级很清楚,不需再多解释

    <?xml version="1.0" encoding="utf-8" ?>
    <doc>
    <NavMenu>
    <Menus text="商铺管理" imgUrl="../images/main_02.jpg" ID="1,2">
    <MenuItem ID="1" Text="商铺列表页面" href="/shop/getshoplist.html" target="main" onclick="replay(this)"></MenuItem >
    <MenuItem ID="2" Text="添加商铺页面" href="/shop/Addshop.html" target="main" onclick="replay(this)"></MenuItem >
    </Menus>

    <Menus text="品牌管理" imgUrl="../images/main_02.jpg" ID="3,4">
    <MenuItem ID="3" Text="品牌列表页面" href="/shop/GetbrandList.html" target="main" onclick="replay(this)"></MenuItem >
    <MenuItem ID="4" Text="添加品牌页面" href="/shop/Addbrand.html" target="main" onclick="replay(this)"></MenuItem >
    </Menus>

    <Menus text="套餐管理" imgUrl="../images/main_02.jpg" ID="5,6">
    <MenuItem ID="5" Text="套餐列表页面" href="/shop/GetpackageList.html" target="main" onclick="replay(this)"></MenuItem >
    <MenuItem ID="6" Text="添加套餐页面" href="/shop/Addpackage.html" target="main" onclick="replay(this)"></MenuItem >
    </Menus>

    <Menus text="会员管理" imgUrl="../images/main_02.jpg" ID="7">
    <MenuItem ID="7" Text="会员列表页面" href="/member/GetmemberList.html" target="main" onclick="replay(this)"></MenuItem >
    </Menus>
    </NavMenu>
    </doc>

    2.MVC的View页面,<%%>里的C#代码可以直接应用于一般处理程序或BLL层或者Controllers中。

    此段代码的主要思想是将存在XML里的标题权限ID是否存在于Session里的泛型集合(从数据库查出全权限的DataSet),若有则显示该标题(大标题ID是从属于它的小标题ID通过逗号拼接的字符串)。

    <%string xmlfile = Server.MapPath("") + "\\XML\\Menu.xml"; //Server.MapPath(“”) 返回当前页面的物理路径;” \XML\\Menu.xml”, 和前边的字符串合起来为XML文档所在的路径
    System.Xml.XmlTextReader reader
    = new System.Xml.XmlTextReader(xmlfile);//XML文档读取器声明
    List
    <System.Data.DataTable> listTb = new List<System.Data.DataTable>();//声明新的泛型
    var mobel
    = (命名空间.Model.Admin_UserModel)Session["txtuname"];//将Session取出类型转换为实体类
    listTb
    = mobel.AU_list;////将Session中的泛型(也是DataTable类型)取出s
    while (reader.Read())
    {
    %>
    <% if (reader.NodeType == System.Xml.XmlNodeType.Element)
    {
    if (reader.Name == "Menus") //对应XML里的大标题
    {
    string str = reader["ID"].ToString(); //XML里的大标题ID
    string[] strArr = str.Split(',');
    //lamda表达式返回 tr(若XML里的节点是否存在于Session里的泛型,则返回泛型集合)
    List
    <System.Data.DataTable> Tr = listTb.FindAll(delegate(System.Data.DataTable t) {
    foreach (System.Data.DataRow dr in t.Rows)
    {
    if (strArr.Length > 1)
    {
    if (strArr[0] == dr["AUP_PermissionID"].ToString() || strArr[1] == dr["AUP_PermissionID"].ToString())
    {
    return
    true;
    }
    }
    else{
    if (strArr[0] == dr["AUP_PermissionID"].ToString())
    {
    return
    true;
    }
    }
    }
    return
    false;
    });

    if (Tr.Count!=0)
    {
    %>
    <div class="nav1">
    <img src="<%=reader["imgUrl"].ToString() %>" /><%=reader["text"].ToString()%></div>
    <%
    }
    }
    %>
    <div class="foter">
    <ul>
    <%if (reader.Name == "MenuItem") //对应XML里的小标题(操作与大标题相似)
    {

    List
    <System.Data.DataTable> Tr = listTb.FindAll(delegate(System.Data.DataTable t)
    {
    foreach (System.Data.DataRow dr in t.Rows)
    {
    if (reader["ID"] == dr["AUP_PermissionID"].ToString())
    {
    return
    true;
    }
    }
    return
    false;
    });


    if (Tr.Count!=0l)
    {
    %>
    <li><a href="<%=reader["href"].ToString() %>" target="main" onclick="replay(this)">
    <%=reader["Text"].ToString()%></a></li>
    <%}
    }
    %>
    </ul>
    </div>
    <%} %>
    <%} %>


    就这些,有些麻烦但是很容易理解,难一点的也许就是/lamda表达式那块



  • 相关阅读:
    C语言实现单处理器的进程管理
    哈夫曼编码
    栈与队列的应用:停车场管理
    带括号的表达式求值
    表达式求值(无括号)
    处理代码异常
    在Pyhon中使用:网络编程 & 接口开发
    枚举函数(enumerate)
    【Redis】数据库相关操作
    数据库(新增数据、建立数据表、复制、对比表数据)
  • 原文地址:https://www.cnblogs.com/ereryday/p/2367030.html
Copyright © 2020-2023  润新知