Атрибут добавляется как строка запроса

Я пытаюсь иметь несколько attributesToIgnoreтак что я настроил это так:

attributesToIgnore="hideOnStandard, hideFormatting"

и мой Mvc.sitemap:

  <mvcSiteMapNode title="Filters" controller="Parameterized">
    <mvcSiteMapNode title="Filters" controller="Parameterized" action="Index"/>
    <mvcSiteMapNode title="Output" controller="Parameterized" action="Output" preservedRouteParameters="id" hideOnStandard="true"/>
    <mvcSiteMapNode title="Formatting" controller="Parameterized" action="Formatting" preservedRouteParameters="id" hideFormatting="true" />
  </mvcSiteMapNode>

Тем не менее, он добавляет hideFormatting="true" к строке запроса для тега привязки, например:

<a href="/Home/Reports/Formatting/29119?hideFormatting=true">Formatting</a>

Как я могу на самом деле выполнить то, что я пытаюсь сделать? Я пытался разграничить attributesToIgnore иначе, но кроме этого я не совсем уверен, как еще поступить. Я действительно не хочу использовать jQuery или что-то, чтобы убрать строку запроса.

РЕДАКТИРОВАТЬ

Как я знаю, что сделать:

@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models

<ul class="navProgress">
    @foreach (var node in Model.Nodes)
    {
        if (!(node.MetaAttributes.Keys.Contains("hideOnStandard") && TempData["IsStandard"] != null && ((bool)TempData["IsStandard"])))
        {
            if (!(node.MetaAttributes.Keys.Contains("hideFormatting") && TempData["hideFormatting"] != null && ((bool)TempData["hideFormatting"])))
            {
                <li @(node.IsCurrentNode ? "class=active" : "")>
                    @Html.DisplayFor(m => node)
                @if (node.Children.Any())
                {
                    @Html.DisplayFor(m => node.Children)
                }
                </li>
            }
        }
    }
</ul>

1 ответ

Решение

Согласно документации MvcSiteMapProvider v3, attributesToIgnore должны быть добавлены к <siteMap> раздел web.config,

<siteMap>
  <providers>
    <add name="MvcSiteMapProvider" type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider" 
         siteMapFile="~/Mvc.Sitemap"
         securityTrimmingEnabled="true"
         cacheDuration="5"
         enableLocalization="true"
         scanAssembliesForSiteMapNodes="true" 
         excludeAssembliesForScan="" 
         includeAssembliesForScan="" 
         attributesToIgnore="hideOnStandard,hideFormatting" 
         nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator, MvcSiteMapProvider" 
         controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, MvcSiteMapProvider"
         actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, MvcSiteMapProvider" 
         aclModule="MvcSiteMapProvider.DefaultAclModule, MvcSiteMapProvider"
         routeMethod=""
         siteMapNodeUrlResolver="MvcSiteMapProvider.DefaultSiteMapNodeUrlResolver, MvcSiteMapProvider" 
         siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider" 
         siteMapProviderEventHandler="MvcSiteMapProvider.DefaultSiteMapProviderEventHandler, MvcSiteMapProvider" />
  </providers>
</siteMap>

Я верю в v3.x, вы также должны были убедиться, что после запятой нет пробела, иначе он не будет правильно соответствовать атрибуту.

Использование:

attributesToIgnore="hideOnStandard,hideFormatting"

Скорее, чем:

attributesToIgnore="hideOnStandard, hideFormatting"
Другие вопросы по тегам