Моя иерархия папок для страниц (все они находятся в одной папке):
Site.Master
Default.aspx
find_provider.aspx
provider.aspx
У меня установлена страница Web.sitemap
:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/Default.aspx" title="Home" description="Homepage">
<siteMapNode url="~/find_provider.aspx" title="Provider" description="Search for provider">
<siteMapNode url="~/provider.aspx" title="Profile" description="Shows each provider profile" />
</siteMapNode>
</siteMapNode>
</siteMap>
Я звоню в своем MasterPage:
<div id="navigation">
<ul>
<li><asp:HyperLink runat="server" ID="lnkHome" NavigateUrl="~/Default.aspx">Home</asp:HyperLink></li>
<asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1">
<ItemTemplate>
<li>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>'><%# Eval("Title") %></asp:HyperLink>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" />
</div>
Итак Default.aspx
- моя целевая страница. Пользователь может нажать find_provider.aspx
, чтобы найти поставщика по своему выбору. Для каждого результата поиска провайдера пользователь может щелкнуть ссылку PROFILE, чтобы просмотреть информацию для каждого отдельного провайдера, который является страницей provider.aspx
.
Итак:
Home
Home
Provider
Home Provider
Profile
Вместо этого я вижу это на своей странице (независимо от того, на какой странице я нахожусь):
Пожалуйста, помогите мне изменить код, чтобы отображать палитру для каждого sitenode и подэтапа.
Пример того, что я хочу достичь:
HTML:
<div class="bcHolder brClear"> <!-- BC MAIN -->
<div class="innerBreadCrumb"> <!-- INNER BC -->
<ul id="breadcrumb">
<li><a href="default.aspx" title="Home"><img src="theImages/homeIcon.gif" alt="Home" title="Home" class="home" /></a></li>
<li id="bc_fp"><a href="find_provider.aspx" title="Find a Provider">Find a Provider</a></li>
<!--<li>{ON THE CURRENT PAGE TEXT/URL</li>-->
</ul>
</div> <!-- INNER BC -->
</div> <!-- BC MAIN -->
Вывод:
В настоящее время это работает для меня. У меня есть еще много кода в моей Page_Load, но это важная часть
в моем текущем предварительном событии MasterPages. У меня есть метод под названием
protected void Page_PreRender(object sender, EventArgs e)
{
SetNavigationLabel();
}
Затем я устанавливаю это внутри страницы Page_Load()
protected void Page_Load(object sender, EventArgs e)
{
var pageUrl = GetCurrentPageName();
}
private void SetNavigationLabel()
{
RadMenu NavigationMenu = (RadMenu)this.FindControl("RadMenu1");
foreach (RadMenuItem m in NavigationMenu.Items)
{
if (Request.Url.AbsoluteUri.ToLower() == Server.MapPath(Request.Url.AbsolutePath.ToLower()) || m.Selected)
{
string sPagePath = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
System.IO.FileInfo oFileInfo = new System.IO.FileInfo(sPagePath);
string sPageName = "~/" + oFileInfo.Name;
oFileInfo = null;
var navName1 = NavigationMenu.FindItemByUrl(Request.RawUrl);
var navName = navName1.Text;
lblNavTitle.Text = navName;
((IDisposable)NavigationMenu).Dispose();
break;
}
}
}
public string GetCurrentPageName()
{
var sPath = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
FileInfo oInfo = new FileInfo(sPath);
var sReturn = oInfo.Name;
oInfo = null;
return sReturn;
}
В отношении вашего вопроса здесь: Как использовать стиль Bootstrap в BreadCrumb с моим меню ASP.NET?
SiteMapPath действует как тег <ul/>
в рендеринге HTML. Поэтому, чтобы использовать метод там, ваша структура, вероятно, будет примерно такой:
<div class="bcHolder brClear"> <!-- BC MAIN -->
<div class="innerBreadCrumb"> <!-- INNER BC -->
<asp:SiteMapPath ID="SiteMap1"
runat="server"
PathSeparator=" / "
ParentLevelsDisplayed="1"
PathDirection="RootToCurrent"
ShowToolTips="true">
<CurrentNodeStyle CssClass="current-node"></CurrentNodeStyle>
<NodeTemplate>
<li><a href="default.aspx" title="Home"><img src="theImages/homeIcon.gif" alt="Home" title="Home" class="home" /></a></li>
<li id="bc_fp"><a href="find_provider.aspx" title="Find a Provider">Find a Provider</a></li>
<!--<li>{ON THE CURRENT PAGE TEXT/URL</li>-->
</NodeTemplate>
</asp:SiteMapPath>
</div> <!-- INNER BC -->
</div> <!-- BC MAIN -->
И затем добавьте javascript, необходимый для разрешения гиперссылки CurrentNode.
Надеюсь, что это поможет.