SiteMapNode 是只读的,属性 'Url' 不能修改

SiteMapNode is readonly, property 'Url' cannot be modified

我使用 MvcSiteMapProvider(Nuget 包 MvcSiteMapProvider.MVC5(版本 4.6.22))为我的网站设置 MVC 面包屑。

它工作正常。

然后我想动态更新 Url 站点地图,例如:

SiteMaps.Current.CurrentNode.Url = Url.Action("Index");

然后我得到这个错误:

SiteMapNode is readonly, property 'Url' cannot be modified

请注意,我仍然可以更新标题:

SiteMaps.Current.CurrentNode.Title = "/Index";

有什么想法吗?

SiteMap 是所有用户共享的静态缓存对象。从技术上讲,所有属性在运行时都是只读的。但是,some of the properties(例如 Title)是请求缓存的,因此您可以在运行时安全地更新它们,而不会影响其他用户。

Url属性是一个特殊的属性,通过MVCUrlHelperclass动态构建URL(直接从你的路线驱动)。将它设置为 Url.Action("Index") 是没有意义的,因为这实际上就是它自己所做的(除非您使用的是 dynamic node provider or custom ISiteMapNodeProvider - 这些是您加载节点配置的启动扩展点,因此属性是可读写的)。

您只需在节点配置中设置正确的控制器和操作(可以是 XML、基于属性或基于代码),URL 将自行解析。

XML 例子

<mvcSiteMapNode title="Projects" controller="Project" action="Index"/>

NOTE: You need to account for all route values in the request, either by adding them as another attribute myId="123" or by using preservedRouteParameters="myId" (which tells it to include the myId from the current request when building the URL). See this article for a detailed description of using these options.

NOTE: Setting a URL in the SiteMap configuration effectively overrides MVC support for that node. So, you shouldn't set a URL at all unless it is a non-MVC URL.