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
属性是一个特殊的属性,通过MVCUrlHelper
class动态构建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.
我使用 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
属性是一个特殊的属性,通过MVCUrlHelper
class动态构建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 usingpreservedRouteParameters="myId"
(which tells it to include themyId
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.