Как я могу скрыть корневой узел SiteMapPath на домашней странице? - PullRequest
1 голос
/ 26 июня 2009

Как я могу скрыть корневой узел в элементе управления SiteMapPath, когда пользователь находится на странице корневого узла? Например, мой путь крошки на дочерней странице:

Домой> Продукты> Молотки> Шариковая ручка

что нормально. Но когда пользователь находится на домашней странице, элемент управления SiteMapPath отображает

Главная

бесполезный беспорядок. Я хочу отключить отображение Home (корневого узла), когда пользователь находится на домашней странице. У меня есть элемент управления SiteMapPath на главной странице. Кроме того, я обрабатываю SiteMapResolve для установки строк запросов в узлах.

Ответы [ 10 ]

13 голосов
/ 26 июня 2009

Одним из возможных решений было бы просто скрыть элемент управления SiteMapPath на главной странице:

mySiteMapPath.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
3 голосов
/ 09 января 2010

Я видел несколько основанных на коде примеров, но вот хорошее решение CSS (хотя ваши целевые браузеры должны поддерживать css 2.1), которое скрывает корневой узел и следующий разделитель пути.

Убейте корневой узел, установив пустой шаблон RootNodeTemplate следующим образом:

<asp:SiteMapPath ID="SiteMapPath1" runat="server" CssClass="breadCrumbTrail">
   <RootNodeTemplate></RootNodeTemplate>
</asp:SiteMapPath>

Это приведет к тому, что он не будет отображать ничего для узла Root, но разделитель пути Root будет по-прежнему отображаться, поэтому добавьте эти CSS-селекторы в таблицу стилей (Важно: обратите внимание, что я присвоил моему элементу SiteMapPath1 класс CssClass с именем breadCrumbTrail):

.breadCrumbTrail
{
  font-size: small;
}

/*
First child element rendered by a SiteMapPath is an <a> tag you have no control over, 
adjacent to that is your root node's span tag, adjacent to that is the root node's 
path-separator span: don't display it.
*/
.breadCrumbTrail > a:first-child + span + span
{
  display: none;
}
2 голосов
/ 26 июня 2009

Мне удалось понять это, но это заняло некоторое время, потому что проблема, с которой я столкнулся, была несколько тонкой. у schou-rode правильная идея, и это то, что я делал в Page_Load безуспешно. Причина, по которой он не работал, заключается в том, что я клонировал узел в SiteMapResolve и возвратил клон. Это произошло до того, как Page_Load, поэтому SiteMap.CurrentNode сослался на клон, и сравнение с SiteMap.RootNode не удалось.

Вот полное решение:

protected void Page_Load(object sender, EventArgs e)
{
    SiteMapPath1.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
}

private SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
{
    if (SiteMap.CurrentNode == null || SiteMap.CurrentNode == SiteMap.RootNode)
    {
        return SiteMap.CurrentNode;
    }
    // clone and set querystring in other nodes...
}
1 голос
/ 08 апреля 2013

Я подключил мой к своему _Layout.cshtml и обнаружил, что самым простым решением было обернуть оператор If (с ранее предложенной логикой) вокруг блока рендеринга элемента управления и вызвать его за день:

@if (SiteMap.CurrentNode != SiteMap.RootNode)
{
  @Html.MvcSiteMap().SiteMapPath()
}
1 голос
/ 17 августа 2011

Существует также свойство ShowStartingNode в SiteMapDataSource. Установите значение false, чтобы скрыть корневой узел.

1 голос
/ 16 мая 2011

На главной странице добавьте приведенный ниже скрипт в часть "head":

protected void Page_Load(object sender, EventArgs e)
{
    SiteMapPath sp = (SiteMapPath)Master.FindControl("SiteMapPath1");
    sp.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
}

Чтобы применить вышеописанный метод, SiteMapPath1 следует поместить на MasterPage.

1 голос
/ 26 мая 2010

Один из правильных способов скрыть корневую заметку SiteMapPath в 3 простых шага:

  • Ссылка на MasterPage из ContentPage

    Пример:

    <%@ MasterType VirtualPath="~/Master.master" %>
    
  • Сделать SiteMapPath защищенным внутренним в классе конструктора

    Пример:

    protected internal global::System.Web.UI.WebControls.SiteMapPath SiteMapPath1;
    
  • Скрыть это от ContentPage

    Пример:

    Master.SiteMapPath1.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
    
0 голосов
/ 15 апреля 2015

ParentLevelsDisplayed = 0 поможет

<asp:SiteMapPath ID="SiteMapPath1" runat="server" PathSeparator="" 
        ParentLevelsDisplayed="0" >
        <RootNodeTemplate></RootNodeTemplate>            
    </asp:SiteMapPath>
0 голосов
/ 16 января 2011

Недавно у меня была похожая проблема, но я использую XmlDataSource для меню в своем решении.

Пример структуры исходного XML:

<root>
  <Menu text="" url=""/>
  <Menu text="" url=""/>
</root>

Если вы не хотите отображать элемент меню «root», вам просто нужно установить для свойства XPath в XmlDataSource значение «/ root / *»

0 голосов
/ 06 апреля 2010
<asp:SiteMapPath ID="contentNavigation" runat="server">
    <RootNodeTemplate>
    </RootNodeTemplate>
</asp:SiteMapPath>

и код CSS:

#ctl00_contentNavigation span:nth-child(2),span:nth-child(3)
{
    display:none;
}
...