• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Kevin Wu's Corner
暂时停一停
博客园    首页       联系   管理    订阅  订阅

自己做的一个菜单

这些天来都没空上来,又有好多新文章出世了,都还没来得及看。

今天在这里就把自己做的一个基于xml的菜单放出来,做为自己学习的一个记录吧

这个菜单是一个用户控件,放在母版页上的,所以先在添加一个用户控件名为:Navigation.ascx
在控件里面添加一个占位控件,这里我选择了panel
完成后页面代码为:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Navigation.ascx.cs" Inherits="UserControls_Navigation" %>
<asp:Panel ID="navigation" runat="server" Height="50px" Width="180px" >
</asp:Panel>

基于xml的话,一个xml文件肯定少不了的了,新建一个xml文件:Navigation.xml
<?xml version="1.0" encoding="utf-8" ?>
<Navigation>
  
<main1>
    
<item url="" title="" />
    
<item url="" title="" />
    
<item url="" title="" />
  
</main1>
  
<main2>
    
<item url="" title="" />
    
<item url="" title="" />
    
<item url="" title="" />
  
</main2>
  
<main3>
    
<item url="" title="" />
    
<item url="" title="" />
    
<item url="" title="" />
  
</main3>
</Navigation>

随便写了一个,呵呵

然后在用户控件的代码页里添加如下代码:
    protected void Page_Load(object sender, EventArgs e)
    {

        InitNavigation(getMemberNode());
    }

    
private XmlNode getMemberNode()
    {
        
if (_member == string.Empty)
            
return null;
        XmlTextReader reader 
= new XmlTextReader(Server.MapPath("~/Navigation.xml"));
        XmlDocument xmldoc 
= new XmlDocument();
        xmldoc.Load(reader);
        reader.Close();
        XmlNode xnode 
= xmldoc.SelectSingleNode("Navigation/" + _navigation);
        
return xnode;
    }

    
private void InitNavigation(XmlNode xnode)
    {
        
if (xnode == null)
            
return;
        
int childnum = xnode.ChildNodes.Count;
        Label header 
= new Label();
        header.Text 
= "<ul>";
        navigation.Controls.Add(header);
        
for (int i = 0; i < childnum; i++)
        {
            HyperLink nav 
= new HyperLink();
            nav.NavigateUrl 
= xnode.ChildNodes[i].Attributes["url"].Value;
            nav.Text 
= "<li>" + xnode.ChildNodes[i].Attributes["title"].Value + "</li>";
            navigation.Controls.Add(nav);
            
if (xnode.ChildNodes[i].ChildNodes.Count > 0)
                drawNavigation(xnode.ChildNodes[i]);
        }
        Label footer 
= new Label();
        footer.Text 
= "</ul>";
        navigation.Controls.Add(footer);
    }

    
private string _navigation;

    
public string Navigation
    {
        
get
        {

            
return _navigation;
        }
        
set
        {
            _navigation
= value;
        }
    }

定义了Navigation属性,为的是在母版页或者子页上动态设置要加载的菜单的名字

例如可以在母版上的Page_load函数里设置属性:
    protected void Page_Load(object sender, EventArgs e)
    {
        Navigation1.Navigation 
= "main1";
    }

运行之后就可以见到结果了.
这里只用到最最简单的方法建立了菜单,如果想建立更灵活的菜单的话,可以使用Repaeter或者其他控件.
没有截图,辛苦大家了.呵呵


by Kevin wu  
posted @ 2006-11-15 22:45  Kevin Wu  阅读(546)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3