• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

实现 ASP.NET 网站地图提供者

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

ASP.NET 网站导航提供若干 Web 服务器控件用于 Web 页面中导航结构的显示:SiteMapPathTreeView,和 Menu 控件。这些 Web 服务器控件都使用 ASP.NET 默认的网站地图提供者。或是从 XML 格式的 Web.sitemap 文件中读取网站地图信息的 XmlSiteMapProvider 类。

另外,也可以实现自定义网站地图提供者。下面列出创建自定义网站地图提供者的三大理由:

  • 需要将不被 ASP.NET 默认网站地图提供者所支持的网站地图信息保存到数据源(比如,某个 Visual FoxPro 数据库,某个 Oracle 数据库,或是其他数据库)。

  • 需要使用不同于 Web.sitemap 文件的结构定义来管理导航信息。比如,开发者那里可能有另外一种存储网站地图数据的实现。

  • 需要使用动态网站地图结构。比如,需要每个客户端帐号分别查看不同的网站地图。

安全提示:实现自定义网站地图提供者并将网站地图数据保存在非 .sitemap 扩展名的文件中是一个潜在的安全隐患。默认时的 ASP.NET 配置会在客户端下载之前对包含已知文件扩展名(如 .sitemap)的文件进行保护。为了保护网站数据,请把自定义网站地图文件存放在 App_Data 目录下。

必需的类

要想实现网站地图提供者,请先创建继承自 System.Web 命名空间下的 SiteMapProvider 抽象类的自定义类,并且实现由 SiteMapProvider 类所暴露的抽象成员。本文将描述在 SiteMapProvider 抽象类中必须实现的属性和方法。

提示:SiteMapProvider 类对网站地图数据有一个强制性约束:即只允许存在一个根目录。ASP.NET 的默认网站地图提供者中对该约束的实现是:在提供者空间里所指定的 URL 必须是唯一的,但是自定义网站地图提供者时就没有这个限制。

必需的 SiteMapProvider 成员

下表仅列出了自定义网站地图提供者必须要实现的方法列表。其他方法则由 SiteMapProvider 基类提供基本实现。

方法 描述

FindSiteMapNode

重新获取 SiteMapNode 类的实例,从而重新呈现页面。该方法已经被重载。

GetChildNodes

重新获取特定 SiteMapNode 类实例中的子节点集。

GetParentNode

重新获取特定 SiteMapNode 类实例中的父节点。

GetRootNodeCore

重新获取由当前提供者所管理的所有节点的根目录。该方法在若干网站导航控件的内部被调用,用于确定导航数据是否已经被提供者装载。且该方法不允许返回空值(null)。

如果开发者虽然对 XmlSiteMapProvider 的功能感到满意但是还想要使用除 Web.sitemap 文件以外的其他数据存储时,就需要使用 StaticSiteMapProvider 类作为被继承对象,而不是 SiteMapProvider 类。另外,有一些方法(如 AddNodeRemoveNode 方法)可能在没有被实现的情况下引发 NotImplementedException 异常。StaticSiteMapProvider 类提供了存储和搜索节点时所需要的所有内部逻辑;所以开发者只需要实现 GetRootNodeCore 方法和抽象的 BuildSiteMap 方法即可。另外,GetRootNodeCore 方法的内部会对 BuildSiteMap 方法进行简单调用。

自定义成员

开发者可能需要为网站地图提供者扩展一些没有被抽象类 SiteMapProvider 所支持的额外功能。如果自定义提供者被配置成默认提供者并且将 Provider 属性返回值的类型强制转换成自定义提供者类型时,任何被添加在自定义网站地图提供者中的公共成员都可以通过 SiteMap 类的 Provider 属性进行访问。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap