Это скорее проблема MVC, чем MvcSiteMapProvider, так как MvcSiteMapProvider использует по умолчанию шаблонное поведение HTML-помощника.
Потребовался поиск, но я нашел способ переопределить это поведение путем добавления дополнительных путей в MVC места вида поиска по умолчанию: Can I Add to the Display/EditorTemplates Search Paths in ASP.NET MVC 3?
System.Web.Mvc.RazorViewEngine rve = (RazorViewEngine)ViewEngines.Engines
.Where(e=>e.GetType()==typeof(RazorViewEngine))
.FirstOrDefault();
string[] additionalPartialViewLocations = new[] {
"~/Views/GeneralTemplates/{0}.cshtml"
};
if(rve!=null)
{
rve.PartialViewLocationFormats = rve.PartialViewLocationFormats
.Union(additionalPartialViewLocations)
.ToArray();
}
Я не считаю, что можно удалить /DisplayTemplates
папка с пути, так как это соглашение (чтобы сохранить его отдельно от /EditorTemplates
). Итак, самое лучшее, что вы сможете сделать, это сделать папку ~/Views/GeneralTemplates/DisplayTemplates/
, используя приведенную выше конфигурацию.
Обратите внимание, что MVC проверяет папку /DisplayTemplates
в том же каталоге, что и ваш вид, прежде чем перейти к /Views/Shared/DisplayTemplates
, чтобы вы могли также перемещать их в один и тот же каталог представлений, где используются соответствующие HTML-хелперы.
Я не пробовал, но при указании шаблона также может быть использован полный путь просмотра (то есть ~/Views/GeneralTemplates/SiteMapPathHelperModel.cshtml
).
@Html.MvcSiteMap().SiteMapPath("~/Views/GeneralTemplates/SiteMapPathHelperModel.cshtml")
Важно: Если изменить расположение всех шаблонов, как это, вам, вероятно, нужно пройти через рекурсивные шаблоны и изменять все DisplayFor
мест в них.
@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); @* // <-- Need to add the diplaytemplate here, too *@
if (node != Model.Last()) {
<text> > </text>
}
}
Вы могли вместо создания пользовательской HTML-помощников, которые не являются шаблонным для решения этой проблемы, если другие решения не работают для вас.
Thnx для вашего ответа! Я пробовал первый вариант, но он не сработал (мой GeneralTemplates находится в папке «Представления/Shared»). И использование полного пути тоже не сработало. Поэтому я собираюсь создать пользовательский HTML-помощник. –