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

C# ASP.NET多站点地图和面包屑,c#,asp.net,webforms,sitemap,breadcrumbs,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" /&

我有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。 我想做的是当我在管理或用户页面上时更改面包屑。 管理>链接1>链接1.1

我还有3个文件: SiteMap.aspx在网站SiteMapAdmin.aspx和SiteMapUser.aspx上显示的默认值

因此,我有我的正常面包屑工作,当我在/Admin时,我希望面包屑使用Admin.sitemap而不是Web.sitemap。 我该怎么做? 提前感谢您

在您的页面\u PreInit事件中,您可以按名称将每个SiteMap驱动控件的SiteMapProvider设置为覆盖默认值

protected void Page_PreInit(object sender, EventArgs e)
{
    this.SiteMapPath1.SiteMapProvider = "SiteMapUser";
    this.Menu1.SiteMapProvider = "SiteMapUser";
}
谢谢你,夜猫子。 我不能用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";
    }
}
它在页面_PreInit上不起作用,所以我将它放在包含SiteMapPath1的母版页中的页面_加载上。 你帮了我很多,谢谢

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

我在名为base.master Class App\u master\u base的主母版页上编写了受保护的无效页面\u PreInitobject sender,EventArgs e{This.SiteMapPath1.SiteMapProvider=SiteMapDefault;}。我想尝试您的解决方案,但它无法识别变量SiteMapPath1。所以我在App_Master_基类中声明了它,但是我还没有找到如何访问这个变量。我试过使用这个.Master.Master.SiteMapPath1.SiteMapProvider=SiteMapUser;因为我的user.master使用的是threecol.master,它使用base.masterRead来学习如何公开master基类上的公共属性。关键是在页面上设置声明,以便您可以访问母版页的那些属性,包括为它们设置值。