我有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。 我怎样才能做到这一点 ? 提前谢谢
答案 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上。 你帮助了我很多,谢谢你。
这是一个与我的目录树相对应的菜鸟解决方案。