我有一个局部视图,用于在我的 MvcSitemap 中渲染出 MvcSiteMapNodes 的子集。
但是我在迭代 MvcSiteMap 节点时遇到了麻烦。
如果我使用;
var nodes = new MvcSiteMapProvider.Web.Html.Models.SiteMapHelperModel();
它返回一个空集合。
你如何迭代 MvcSiteMapNodes?
我有一个局部视图,用于在我的 MvcSitemap 中渲染出 MvcSiteMapNodes 的子集。
但是我在迭代 MvcSiteMap 节点时遇到了麻烦。
如果我使用;
var nodes = new MvcSiteMapProvider.Web.Html.Models.SiteMapHelperModel();
它返回一个空集合。
你如何迭代 MvcSiteMapNodes?
在 v4 中,位置已更改,因为不再使用 Microsoft 站点地图提供程序。也不再需要投射。
var nodes = MvcSiteMapProvider.SiteMaps.Current.CurrentNode.RootNode.ChildNodes;
foreach (var node in nodes)
{
// Do something with the node's values - no need to cast anymore.
}
通过使用以下方法解决了这个问题;
var nodes = SiteMap.CurrentNode.RootNode.ChildNodes;
foreach(SiteMapNode node in nodes)
{
MvcSiteMapProvider.MvcSiteMapNode mvcNode = (MvcSiteMapProvider.MvcSiteMapNode)node;
对我有用的几乎是@NightOwl888 的解决方案,但没有CurrentNode
:
var nodes = MvcSiteMapProvider.SiteMaps.Current.RootNode.ChildNodes;
foreach (var node in nodes)
{
// ...
}
奖励:您还可以使用 LINQ 来遍历节点树的某些部分/子集,例如:
var projectNode = MvcSiteMapProvider.SiteMaps.Current.RootNode.ChildNodes.Where(n => n.Key == "Projects").FirstOrDefault();