Есть ли способ изменить атрибуты узла карты сайта во время выполнения?

1

Мне интересно, есть ли способ изменить содержимое карты сайта во время работы приложения и автоматически обновить приложение?

Пример. Я хочу изменить URL-адрес определенного узла.

Я использую MVC SiteMap Provider, хотя, возможно, не имеет значения, какой провайдер вы используете, если он относится к sitemap.

Теги:
asp.net-mvc-5
sitemap
mvcsitemapprovider

1 ответ

1

Некоторые свойства доступны для записи во время выполнения. Это означает, что вы можете обновить их для текущего запроса, но это значение не будет перенесено с одного запроса на следующий. Эти свойства (по версии 4.4.6):

  • порядок
  • заглавие
  • Описание
  • TargetFrame
  • URL изображения
  • ImageUrlProtocol
  • ImageUrlHostName
  • VisibilityProvider
  • Clickable
  • UrlResolver
  • протокол
  • HostName
  • каноническая URL CANONICALURL
  • CanonicalKey
  • CanonicalUrlProtocol
  • CanonicalUrlHostName
  • маршрут
  • Атрибуты
  • RouteValues

Вы можете записать эти значения, вызвав один из методов "найти" (или используя свойство текущего узла), чтобы получить ссылку на узел, а затем сразу же обновить свойство.

var currentNode = MvcSiteMapProvider.SiteMaps.Current.CurrentNode;
var parentNode = null;

// Current node will be null on any page that is not in the sitemap (or configured incorrectly to match)
if (currentNode != null)
{
    parentNode =  = currentNode.ParentNode;
}

// Parent node will be null if the current node is the root node
// or is null.
if (parentNode != null)
{
    parentNode.Description = "Some Parent Node";
}

Цель SiteMap заключается в поддержании отношений между разными URL-адресами, поэтому изменение URL-адреса во время выполнения несколько портит его цель. В конце концов, связь может быть недействительной, если URL-адрес изменился, но узел не изменил позицию в иерархии.

Однако вы можете динамически добавлять узлы с помощью динамических узлов или путем реализации ISiteMapNodeProvider для создания узлов на основе динамических данных. Кроме того, вы можете принудительно перестроить SiteMap, используя атрибут SiteMapCacheReleaseAttribute для каждого из действий, которые обновляют данные.

Вы также можете подделывать панировочные сухари, используя сохраненныеRouteParameters, как описано в разделе Как сделать MvcSiteMapProvider. Помните позицию пользователя - принудительное совпадение. Это приведет к тому, что определенный узел всегда будет соответствовать каждому значению для указанных значений маршрута (например, "id"), поэтому узел будет эффективно соответствовать нескольким URL. Затем вы можете исправить заголовок и видимость узла, как описано в связанной статье.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню