自己做的一个菜单
这些天来都没空上来,又有好多新文章出世了,都还没来得及看。
今天在这里就把自己做的一个基于xml的菜单放出来,做为自己学习的一个记录吧
这个菜单是一个用户控件,放在母版页上的,所以先在添加一个用户控件名为:Navigation.ascx
在控件里面添加一个占位控件,这里我选择了panel
完成后页面代码为:
基于xml的话,一个xml文件肯定少不了的了,新建一个xml文件:Navigation.xml
随便写了一个,呵呵
然后在用户控件的代码页里添加如下代码:
定义了Navigation属性,为的是在母版页或者子页上动态设置要加载的菜单的名字
例如可以在母版上的Page_load函数里设置属性:
运行之后就可以见到结果了.
这里只用到最最简单的方法建立了菜单,如果想建立更灵活的菜单的话,可以使用Repaeter或者其他控件.
没有截图,辛苦大家了.呵呵
今天在这里就把自己做的一个基于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>
<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>
<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;
}
}
{
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";
}
{
Navigation1.Navigation = "main1";
}
运行之后就可以见到结果了.
这里只用到最最简单的方法建立了菜单,如果想建立更灵活的菜单的话,可以使用Repaeter或者其他控件.
没有截图,辛苦大家了.呵呵
by Kevin wu