То, как MVC SiteMapProvider выкладывает хлебные крошки, они отображаются как
Главная > Детали > Управление проектом
Что мне делать, если я хочу изменить «>» на другой символ (или, в моем конкретном случае, на значок в начальной загрузке Twitter)?
На данный момент я вызываю хлебные крошки, используя @Html.MvcSiteMap().SiteMapPath()
Я зашел в Views/Shared/DisplayTemplates/SiteMapPathHelperModel и попытался изменить
<text> > </text>
to:
<text><i class="icon-chevron-right"></i></text>
но больший тогда символ остался. Я не получил никаких ошибок.
Вот некоторый потенциально релевантный код из частичного представления, использующего хлебные крошки:
@if(Request.IsAuthenticated)
{
<div class="breadcrumb trail">
<i class="icon-home"></i>
@Html.MvcSiteMap().SiteMapPath()
</div>
<p align ="right">
<i class="icon-user"></i> <text>Welcome <strong>@User.Identity.Name</strong>!
[ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
</p>
}
else
{
@* display nothing*@
}
Вот карта сайта, объявленная в web.config:
<siteMap defaultProvider="MvcSiteMapProvider" enabled="true">
<providers>
<clear />
<add name="MvcSiteMapProvider" type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider" siteMapFile="~/Mvc.Sitemap" securityTrimmingEnabled="true" cacheDuration="5" enableLocalization="true" scanAssembliesForSiteMapNodes="true" includeAssembliesForScan="" excludeAssembliesForScan="" attributesToIgnore="visibility" nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator, MvcSiteMapProvider" controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, MvcSiteMapProvider" actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, MvcSiteMapProvider" aclModule="MvcSiteMapProvider.DefaultAclModule, MvcSiteMapProvider" siteMapNodeUrlResolver="MvcSiteMapProvider.DefaultSiteMapNodeUrlResolver, MvcSiteMapProvider" siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider" siteMapProviderEventHandler="MvcSiteMapProvider.DefaultSiteMapProviderEventHandler, MvcSiteMapProvider" />
</providers>
</siteMap>
Код в шаблоне SiteMapPathHelperModel.cshtml:
@model MvcSiteMapProvider.Web.Html.Models.SiteMapPathHelperModel
@using System.Web.Mvc.Html
@using System.Linq
@using MvcSiteMapProvider.Web.Html.Models
@foreach (var node in Model) {
@Html.DisplayFor(m => node);
if (node != Model.Last()) {
@*Original Symbol*@
@* <text> > </text> *@
<text> › </text>
}
}
Я совсем не в том, как я собираюсь это делать, или я просто что-то упускаю?
ОБНОВЛЕНИЕ Вы можете передать шаблон в метод SiteMapPath в виде строки. Пытаясь сделать это в частичном представлении, которое вызывает этот метод, я передаю его так:
@Html.MvcSiteMap().SiteMapPath("SiteMapPathHelperModel")
Я удалил файл acsx из проекта, чтобы он не попадал сюда по умолчанию (я хочу, чтобы он использовал шаблон cshmtl). Я изменил код шаблона, чтобы использовать другой символ, и перестроил, сохранил все, а затем запустил проект.
Несмотря на все это, он по-прежнему использует символ «>» по умолчанию.