是否有在运行时修改站点地图节点属性的方法

本文关键字:节点 属性 方法 地图 站点 运行时 修改 是否 | 更新日期: 2023-09-27 18:13:40

我想知道是否有一种方法可以在应用程序运行时更改站点地图的内容并相应地自动更新应用程序?

示例:我想更改特定节点的URL。

我正在使用MVC SiteMap提供程序,虽然也许它并不重要你使用什么提供程序,只要它属于SiteMap。

是否有在运行时修改站点地图节点属性的方法

某些属性在运行时是可请求写入的。这意味着您可以针对当前请求更新它们,但值不会从一个请求延续到下一个请求。这些属性是(从v4.6.7开始):

  • 标题
  • TargetFrame
  • ImageUrl
  • ImageUrlProtocol
  • ImageUrlHostName
  • VisibilityProvider
  • 点击
  • UrlResolver
  • CanonicalUrl
  • CanonicalKey
  • CanonicalUrlProtocol
  • CanonicalUrlHostName
  • 性>
  • RouteValues

可以通过调用"find"方法之一(或使用当前节点属性)来获取对节点的引用,然后直接更新该属性来写入这些值。

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动态添加节点,以便基于动态数据创建节点。此外,您可以通过在更新数据的每个操作上使用sitemapcacherreleaseeattribute来强制SiteMap立即重建。

你也可以像如何让MvcSiteMapProvider记住用户的位置-强制匹配中描述的那样使用preservedRouteParameters来伪造面包屑。这将使一个特定的节点总是匹配指定路由值的每个值(例如"id"),因此该节点将有效地匹配多个URL。然后,您可以像链接的文章中所描述的那样修复该节点的标题和可见性。