ASP.NET多个站点地图和面包屑

时间:2015-03-03 14:20:44

标签: c# asp.net webforms sitemap breadcrumbs

我有Web.sitemap,admin.sitemap,user.sitemap。 我在web.config中添加了3个提供程序。

<siteMap defaultProvider="SiteMapDefault">
  <providers>
    <add
      name="SiteMapDefault"
      type="System.Web.XmlSiteMapProvider"
      siteMapFile="Web.sitemap" />
    <add
      name="SiteMapUser"
      type="System.Web.XmlSiteMapProvider"
      siteMapFile="user.sitemap" />
    <add
      name="SiteMapAdmin"
      type="System.Web.XmlSiteMapProvider"
      siteMapFile="admin.sitemap" />
  </providers>
</siteMap>

我的面包屑在主页中:

<b>You are here: </b>
    <asp:SiteMapPath ID="SiteMapPath1" runat="server">
    </asp:SiteMapPath>

目前正在使用SiteMapDefault。 我想在Admin或User页面上更改breadcrumb。 管理员&gt;链接1&gt;链接1.1

我还有3个文件: SiteMap.aspx(网站上可见的默认值),SiteMapAdmin.aspx和SiteMapUser.aspx。

所以我有正常的面包屑工作,当我进入/ Admin时,我希望面包屑使用admin.sitemap而不是Web.sitemap。 我怎样才能做到这一点 ? 提前谢谢

2 个答案:

答案 0 :(得分:0)

Page_PreInit事件中,您可以按名称设置每个SiteMap驱动控件的SiteMapProvider以覆盖默认值。

protected void Page_PreInit(object sender, EventArgs e)
{
    this.SiteMapPath1.SiteMapProvider = "SiteMapUser";
    this.Menu1.SiteMapProvider = "SiteMapUser";
}

答案 1 :(得分:0)

谢谢NightOwl888。 我不能使用MasterType方法。我尝试使用FindControl(...)但它不起作用。 所以我解决了这个问题:

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.ToString().IndexOf("user") != -1)
    {
        SiteMapPath1.SiteMapProvider = "SiteMapUser";

    }
    else if (Page.ToString().IndexOf("admin") != -1)
    {
        SiteMapPath1.SiteMapProvider = "SiteMapAdmin";
    }
    else
    {
        SiteMapPath1.SiteMapProvider = "SiteMapDefault";
    }
}

它在Page_PreInit上不起作用,所以我把它放在包含SiteMapPath1的masterPage的Page_Load上。 你帮助了我很多,谢谢你。

这是一个与我的目录树相对应的菜鸟解决方案。