技术开发 频道

ASP.NET2.0自动搜索文件组成导航系统


    【IT168 技术文档】 
    ASP.NET2.0的导航系统确实给web开发带来方便,但是用过的用户就会发现导航系统有一个很大的缺陷:他需要你 手工编写web.sitemapweb.sitemap的语法是相当的简单,但是实际运用时,虽然简单,对于稍微复杂的导航,你肯定容易出错。下面是一个简单的sitemap,

<siteMap>

 

  <siteMapNode title="Home" url="~/default.aspx" >

 

    <siteMapNode title="Introduction to ASP.NET" url="~/introduction/default.aspx">

 

    <siteMapNode title="What's New in Whidbey?" url="~/introduction/whatsnew.aspx"/>

 

      <siteMapNode title="Sample Applications (Starter Kits)" url="~/introduction/starterkits.aspx"/>

 

      <siteMapNode title="Introduction to Visual Web Developer" url="~/introduction/vwd.aspx"/>

 

    </siteMapNode>

 

    <siteMapNode title="Building A Web Application" url="~/development/default.aspx">

 

      <siteMapNode title="Building a Simple Application" url="~/development/simple/default.aspx">

 

        <siteMapNode title="Introduction to ASP.NET pages" url="~/development/simple/pages.aspx"/>

 

        <siteMapNode title="Introduction to Server Controls" url="~/development/simple/servercontrols.aspx"/>

 

        <siteMapNode title="Inline vs Code Behind Pages" url="~/development/simple/codeseparation.aspx"/>

 

        <siteMapNode title="Sharing Code Between Pages" url="~/development/simple/codedirectory.aspx"/>

 

      </siteMapNode>

 

</siteMap>

 

说白了,他只是一些siteMapNode 的嵌套,但是嵌套的开闭呼应对人而言,是一个烦点,但是对计算机来说,就喜欢处理这些简单的关系,所以我们可以编写一个文件,让系统自动检索当前应用程序的页面并自动生成导航。

 

首先定义一些变量

  //私有成员

        private SiteMapNode _root;

 

        private String _rootTitle = "Home";

 

        private string _rootUrl = "~/Default.aspx";

 

 

        private bool _useDefaultPageAsFolderUrl = true;

 

        private string _defaultPageName = "default.aspx";

 

        private CacheDependency _fsMonitor;

 

 

        private StringDictionary _excludeFileList;   

 

        private StringDictionary _excludeFolderList; 

 

        private char[] _listSeparator ={ ',' };

 

     

 

在这些变量中,_root变量存放站点的根目录,另外定义了_rootTitle_rootUrl,使用这两个变量存放根目录的连接标题和链接地址。

 

 你可能发现我还定义了CacheDependency 类型的_fsMonitor,在本导航里,使用了缓存技术而且强烈推荐你使用缓存,因为站点导航将来在各个页面使用,如果每次都由系统自动根据文件列表生成导航,那么将明显影响性能,所以这里使用了缓存,基本思想是:如果用户没有更改站点下的页面,就直接从缓存里获取导航信息,否则,就重新生成站点导航,生成新导航后,同样会复制一份副本到到当前缓存里。

 

 

 在上面的变量里还有两个变量:_excludeFileLis_excludeFolderList,顾名思义,这两个变量表示将来我想要排斥在导航里的文件和文件夹。什么意思呢?

 

  由于我们是让系统枚举根目录下的所有文件,所以系统将默认根据该目录下的所有文件生成所有站点导航,这显然并不能够完全满足我们的需求。

 

在后面实现的代码里,你可以发现如下一段代码:

 

 

0
相关文章