XmlSiteMapProvider.BuildSiteMap 方法

定义

从 XML 文件加载站点地图信息,并在内存中生成它。

public:
 override System::Web::SiteMapNode ^ BuildSiteMap();
public override System.Web.SiteMapNode BuildSiteMap ();
override this.BuildSiteMap : unit -> System.Web.SiteMapNode
Public Overrides Function BuildSiteMap () As SiteMapNode

返回

SiteMapNode

返回站点地图导航结构的根 SiteMapNode

例外

XmlSiteMapProvider 未正确地初始化。

  • 或 - 分析 siteMapFile 时发现不唯一的 <siteMapNode>

  • 或 - siteMapFile 所指定的文件的扩展名不是 .sitemap。

  • 或 - siteMapFile 所指定的文件不存在。

  • 或 - provider<siteMapNode> 中配置的提供程序返回空根节点。

指定了 siteMapFile,但是该路径位于应用程序的当前目录结构之外。

加载配置文件时出错。

  • 或 - 配置文件的顶层元素不是 named <siteMap>

  • 或 - 配置文件中存在多个顶层节点。

  • 或 - <siteMap> 的子级具有不同于 <siteMapNode> 的名称。

  • 或 - 分析 <siteMapNode> 时发现意外特性。

  • 或 - 子元素嵌套在设置了 <siteMapNode>provider 下面。

  • 或 - roles<siteMapNode> 包含无效字符。

  • 或 - 分析 url 时发现不唯一的 <siteMapNode>

  • 或 - 发现具有重复 SiteMapNode 值的 Key

  • 或 - 在为包含显式资源表达式的节点定义的 ResourceKeycustom 特性上指定了 TitleSiteMapNode

  • 或 - 向 TitleDescription 或向 SiteMapNodecustom 特性应用了显式的资源表达式,但显式信息无效。

  • 或 - 分析 UrlSiteMapNode 时出错。

无法在当前站点地图提供程序集合中找到命名的提供程序。

引用站点地图文件的 <siteMapNode> 包含用于 siteMapFile 的空字符串。

siteMapFile<siteMapNode> 使用了物理路径。

  • 或 - 在尝试分析 siteMapFile 中指定的文件的虚拟路径时发生错误。

示例

下面的代码示例演示如何创建 类的新实例并初始化它以基于 XML 数据生成 XmlSiteMapProvider 站点地图。

<%@ Page Language="c#" %>  
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
 <SCRIPT runat="server">  
 private void Page_Load(object sender, System.EventArgs e)  
 {  
     // Create an instance of the XmlSiteMapProvider class.  
     XmlSiteMapProvider testXmlProvider = new XmlSiteMapProvider();  
     NameValueCollection providerAttributes = new NameValueCollection(1);  
     providerAttributes.Add("siteMapFile","test.sitemap");  
     // Initialize the provider with a provider name and file name.  
     testXmlProvider.Initialize("testProvider", providerAttributes);  

     // The BuildSiteMap method is implicitly called when the   
     // RootNode property is accessed.  

     // Prints "/myvirtualdirectory/WebForm1.aspx"  
     Response.Write(testXmlProvider.RootNode.Url + "<BR>");  
     // Prints "/myvirtualdirectory/WebForm2.aspx"  
     Response.Write(testXmlProvider.CurrentNode.Url + "<BR>");  
 }  

前面的代码示例使用位于应用程序虚拟根目录的 XML ASP.NET 文件。 该文件采用以下格式:

<siteMap>  
     <siteMapNode title="RootNode" description="The root page." url="WebForm1.aspx">  
         <siteMapNode title="CurrentNode" description="Some sub page." url="WebForm2.aspx"/>  
     </siteMapNode>  
 </siteMap>  

注解

BuildSiteMap调用 方法以从持久性存储加载和生成站点地图。

有关启用安全修整时的默认行为,请参阅 中的"备注 IsAccessibleToUser "。

XmlSiteMapProvider 对象分析和加载站点地图数据后,所有加载的对象 SiteMapNode SiteMapNodeCollection 和集合都成为只读对象。 从站点地图文件分析 属性时,它会将应用程序相对 URL 以及相对 URL 转换为 XmlSiteMapProvider Url 应用程序绝对虚拟路径。

XmlSiteMapProvider订阅 .sitemap 文件的文件更改通知。 如果对 .sitemap 文件进行了任何更改,将重新加载 ,并重新生成 XmlSiteMapProvider 站点地图结构。

适用于

另请参阅