一个根据身份验证遍历XML文件做成一个树型导航条~~

本文介绍如何使用ASP.NET的Menu控件结合XML文件来动态生成导航菜单,并通过Forms验证来控制不同用户的访问权限。
ASP.NET的Menu和数控件可以绑定XML文件,而且在视图状态下就可以基本完成整个编辑绑定工作,但实际情况千变万化,我遇到过一种情况,就是网站采用Forms验证,登录后台后根据权限的不同产生一个导航条。其实实现的方法很多,JS可以,但是我至今还没有找到一款Windows下适合编写JS代码的工具,每次只能凭ctrl解决问题。。而且JS的调试也是一个问题,IE很弱智,只能转到Firefox中,很是繁琐,所以一般情况下,我都采用C#绑定。

首先是Forms验证,这个不是本篇的重点,所以不作详细的说明。权限有“"System", "Ador", "Xml", "Type", "Blog", "Group", "File", "Goods", "Admin", "User"”,其中“User”是前台注册用户拥有的权限,“Admin”以及之前的权限是后台管理的权限。绑定的XML文件代码如下(Admin_Menu.XML):
<?xml version="1.0" encoding="utf-8" ?>
<menu>
  
<menuItem url="#" title="网站全局设置"  target="_self" Role="System">
    
<menuItem url="Admin_Config.aspx" title="参数设置"  target="Mian" Role="System"/>
    
<menuItem url="Admin_RePort.aspx" title="举报管理" target="Mian" Role="System"/>
  
</menuItem>
  
<menuItem url="#" title="用户及管理员"  target="_self" Role="Ador">
    
<menuItem url="Admin_User.aspx" title="Blog用户管理"  target="Mian" Role="Ador"/>
    
<menuItem url="Admin_AdWork.aspx" title="后台管理统计" target="Mian" Role="Ador"/>
  
</menuItem>
  
<menuItem url="#" title="Xml文件管理"  target="_self" Role="Xml">
    
<menuItem url="Admin_Xml.aspx?Way=Auto" title="自动生成文件"  target="Mian" Role="Xml"/>
    
<menuItem url="Admin_Xml.aspx?Way=Hand" title="手动生成文件" target="Mian" Role="Xml"/>
    
<menuItem url="Admin_Xml.aspx?Way=Repair" title="修复xml文件" target="Mian" Role="Xml"/>
  
</menuItem>
  
<menuItem url="#" title="Type类别设置"  target="_self" Role="Type">
    
<menuItem url="Admin_Type.aspx?Go=Goods" title="物品栏目" target="Mian" Role="Type"/>
    
<menuItem url="Admin_Type.aspx?Go=File" title="上传栏目" target="Mian" Role="Type"/>
    
<menuItem url="Admin_Type.aspx?Go=Group" title="圈子栏目" target="Mian" Role="Type"/>
    
<menuItem url="Admin_BlogFClass.aspx" title="博客大类设置"  target="Mian" Role="Type"/>
  
</menuItem>
  
<menuItem url="#" title="博客管理"  target="_self" Role="Blog">
    
<menuItem url="Admin_BlogSClass.aspx" title="小类设置"  target="Mian" Role="Blog"/>
    
<menuItem url="Admin_BlogList.aspx" title="博客文章管理"  target="Mian" Role="Blog"/>
    
<menuItem url="Admin_BlogImage.aspx" title="博客图片管理"  target="Mian" Role="Blog"/>
  
</menuItem>
  
<menuItem url="#" title="圈子管理"  target="_self" Role="Group">
    
<menuItem url="Admin_GroupLife.aspx" title="圈子活动管理"  target="Mian" Role="Group"/>
  
</menuItem>
  
<menuItem url="#" title="上传文件管理"  target="Mian" Role="File">
    
<menuItem url="Admin_PhotoList.aspx" title="图片管理" target="Mian" Role="File"/>
    
<menuItem url="Admin_MediaList.aspx" title="音频管理" target="Mian" Role="File"/>
    
<menuItem url="Admin_VideoList.aspx" title="视频管理" target="Mian" Role="File"/>
    
<menuItem url="Admin_FlashList.aspx" title="Flash管理" target="Mian" Role="File"/>
    
<menuItem url="Admin_DocList.aspx" title="文档文件管理" target="Mian" Role="File"/>
    
<menuItem url="Admin_ZipList.aspx" title="压缩文件管理" target="Mian" Role="File"/>
    
<menuItem url="Admin_Others.aspx" title="其它文件" target="Mian" Role="File"/>
  
</menuItem>
  
<menuItem url="#" title="物品管理"  target="Mian" Role="Goods">
    
<menuItem url="Admin_Goods.aspx" title="社区物品管理" target="Mian" Role="Goods"/>
    
<menuItem url="Admin_GClass.aspx" title="物品小类别" target="Mian" Role="Goods"/>
  
</menuItem>
</menu>

XML文件也不需太多的说明,Role节点值就是对应的权限。

在网上有些高人给出了遍历XML的代码,按照那些思路,修改一下,代码如下:

private int LinkNum = 0;
        
//private static int LinkNum = 0;全局继承
        protected void Page_Load(object sender, EventArgs e)
        
{
            
try
            
{
                XmlDocument xmlDoc 
= new XmlDocument();
                xmlDoc.Load(Server.MapPath(
"../XML_Total/Admin_Menu.xml"));
                BuildTree(xmlDoc.ChildNodes[
1].ChildNodes, TreeMenu.Nodes);
            }

            
catch
            
{

            }


        }

        
private void BuildTree(XmlNodeList XmlNodes, TreeNodeCollection treeNodes)
        
{
            
for (int i = 0; i < XmlNodes.Count; i++)
            
{
                
if (XmlNodes[i].NodeType == XmlNodeType.Element)
                
{
                    TreeNode tNode 
= new TreeNode();
                    
if (XmlNodes[i].Attributes.Count > 0)
                    
{
                        
if (User.IsInRole(XmlNodes[i].Attributes["Role"].Value))
                        
{
                            
if (XmlNodes[i].HasChildNodes)
                            
{
                                tNode.Target 
= "_self";
                                tNode.NavigateUrl 
= "javascript:TreeView_ToggleNode(TreeMenu_Data," + LinkNum + ",TreeMenun" + LinkNum + ",' ',TreeMenun" + LinkNum + "Nodes)";
                            }

                            
else
                            
{
                                tNode.NavigateUrl 
= XmlNodes[i].Attributes["url"].Value;
                                tNode.Target 
= XmlNodes[i].Attributes["target"].Value;
                            }

                            tNode.Text 
= XmlNodes[i].Attributes["title"].Value;
                            LinkNum
++;
                            treeNodes.Add(tNode);
                        }

                    }

                    
if (XmlNodes[i].HasChildNodes)
                    
{
                        BuildTree(XmlNodes[i].ChildNodes, tNode.ChildNodes);

                    }


                }

            }

        }
其实就是一个遍历XML文件,根据Forms验证自带的用户权限验证,看是否与XML中“Role”值对应。

转载于:https://www.cnblogs.com/MilanGo/archive/2007/09/09/887262.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值