ASP.NET 2.0网站导航主要围绕着三个控件进行的,它们是TreeView控件、Menu控件、SiteMapPath控件。这三个控件主要负责可视化网站导航结构,另外还有SiteMapDataSource数据源控件以及.sitemap文件等。由这些控件与导航结构文件组成了ASP.NET 2.0的网站导航解决方案。
ASP.NET.2.0网站导航的架构如下图所示,图的左部是各层之间的相互沟通方式,而图的右部为各层相对应的实际控件与文件类型。
一、创建网站导航地图
要实现网站的导航功能,首先必须要创建一个描述网站层次的XML结构文件,里面存放了从根节点到子节点的数据,
包含URL网页路径名称、Title及描述说明,这样网站导航API及网站导航控件便能够公开呈现网站的结构。
从上图的网站导航架构图可以清楚的看到创建网站导航结构文件的格式有两种:系统默认的SiteMap文件格式及自定
义的XML格式。其实这两种格式的文件没有多大区别,其区别就在于自定义的XML格式文件可以使用自己的XML节点名
称,而SiteMap格式必须按照系统定义的默认名称。
1.创建SiteMap文件
在visual stido 2005解决方案资源管理器项目上通过右键添加新项就可以添加站点地图。其格式如下:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title="" description="">
<siteMapNode url="" title="" description="" />
<siteMapNode url="" title="" description="" />
</siteMapNode>
</siteMap>
所要做的工作就是添加描述网站的层次结构的节点数据,然后在url、title和description字段的双引号之间填上相
关的数据就完成了SiteMap文件的创建。该文件的默认名称为Web.sitemap。
2.创建自定义XML网站导航
如不想受限于系统默认的sitemap文件格式,可以自定义一个XML文件供导航控件来使用。这个XML文件的格式同
sitemap完全相同,只不过节点的名称可以自由定义,但在使用时必须与sitemap文件做一个对应设置,这样系统才不
会出错。
二、ASP.NET 2.0导航控件
1.TreeView控件
如下图所示,在图中最上层的节点为根节点,再下层为父节点,父节点下又可以子节点,如果子节点下不再有任何节
创建TreeView控件及其节点有四种方式:
1)使用SiteMapDataDource绑定到SiteMap文件。
2)绑定到XML文件。
3)使用节点编辑器。
4)以程序的方式创建。
这里仅介绍以程序方式创建,相信大家都比较喜欢自由操纵程序的快感。但在使用前三种方式时要注意以下几个问题
:
1)如果web.sitemap文件中节点数超过11个时,TreeView会选择显示部分节点的真实名称。
2)使用绑定到XML文件时,要指定TreeView控件数据源为XmlDataSource控件,并指定相应的XML数据文件,这时
TreeView只显示节点,而没有显示实际节点名称,这是因为没有设置相关字段的对应,但运行时能正常显示。这时可
以使用TreeView DataBinding编辑器设置XML节点对应字段。
3)虽然使用节点编辑器最容易,但它也是最受限制的,没有灵活性是它的最大弱点。
在使用程序动态创建TreeView控件时一般有两种方法:以TreeNode节点方式创建TreeView控件和通过程序与XML文件
进行连接创建TreeView控件。下面分别进行详细介绍。
1)以TreeNode节点方式创建TreeView控件。
相关的程序代码如下:
TreeView TreeView1 = new TreeView();
TreeNode RootNode = new TreeNode();//创建根节点。
RootNode.Text ="";//设置节点的显示文字。
RootNode.Value ="";//设置节点的数值。
RootNode.NavigateUrl=".aspx";//设置节点的Url。
TreeView1.Nodes.Add(RootNode);//添加节点到TreeView控件。
TreeView1.ShowLines = true;//显示节点之间的连接线。
TreeView1.ShowCheckBoxes = TreeNodeTypes.Leaf;//设置节点前要显示CheckBox控件。
Page.FindControl("Form1").Controls.Add(TreeView1);//通过程序动态添加TreeView控件到Web窗体中。
TreeNodeType类型共有All(所有节点均显示CheckBox控件)、Root(只有根节点显示CheckBox控件)、Parent(只
有父节点显示CheckBox控件)、Leaf(只有子节点显示CheckBox控件)、None(所有节点均不显示CheckBox控件)五
种选择。
2)通过程序与XML文件进行连接创建TreeView控件。
其思路主要是,创建TreeView和XmlDataSource控件,指定XmlDataSource要读取的XML文件,设置TreeView数据源为
XmlDataSource。然后通过TreeNodeBinding设置TreeView与XML节点的对应关系。最后将TreeNodeBinding加入到
TreeView控件中进行DataBind操作。示例代码如下:
TreeView TreeView1 = new TreeView();
XmlDataSource XmlSample = new XmlDataSource();
XmlSample.ID = "";
XmlSammple.DataFile = "";/指定XML数据文件
TreeView1.DataSource = XmlSample;
Page.Controls.Add(XmlSample);
//创建根节点。
TreeNodeBinding RootBinding = new TreeNodeBinding();
RootBinding.DataMember = "Root";//指定RootBinding数据成员为Root节点。
RootBinding.NavigateUrlField = "url";//url,name,describe为XML文件中的节点。
RootBinding.TextField = "name";
RootBinding.ToolTipField = "Describe";
TreeView1.DataBindings.Add(RootBinding);//将RootBinding加入到DataBindings中。
//创建父节点。
TreeNodeBinding ParentBinding = new TreeNodeBinding();
ParentBinding.DataMember = "Parent";//指定ParentBinding数据成员为Parent节点。
ParentBinding.NavigateUrlField = "url";//url,name,describe为XML文件中的节点。
Parentinding.TextField = "name";
ParentBinding.ToolTipField = "Describe";
TreeView1.DataBindings.Add(ParentBinding);//将ParentBinding加入到DataBindings中。
//创建叶节点。
TreeNodeBinding LeafBinding = new TreeNodeBinding();
LeafBinding.DataMember = "Child";//指定LeafBinding数据成员为Leaf节点。
LeafBinding.NavigateUrlField = "url";//url,name,describe为XML文件中的节点。
LeafBinding.TextField = "name";
LeafBinding.ToolTipField = "Describe";
TreeView1.DataBindings.Add(LeafBinding);//将LeafBinding加入到DataBindings中。
Page.FindControl("Form1").Controls.Add(TreeView1);
TreeView1.DataBind();//进行数据绑定。
(未完 待续)