获取来自PortalSitemapprovider的项目时从SiteMapNode获取字段值
-
10-12-2019 - |
题
我正在尝试使用portalsitemappovider查询我的列表。这是我的代码:
public List<string> GetChachedItems(string webUrl, SPQuery query)
{
SiteMapNodeCollection nodeCollection = new SiteMapNodeCollection();
PortalSiteMapProvider portalProvider = PortalSiteMapProvider.CurrentNavSiteMapProviderNoEncode;
PortalWebSiteMapNode webNode = portalProvider.FindSiteMapNode(webUrl) as PortalWebSiteMapNode;
if (webNode != null)
{
nodeCollection = portalProvider.GetCachedListItemsByQuery(
webNode, "test", query, SPContext.Current.Web);
}
List<string> itemCollection = new List<string>();
foreach(SiteMapNode node in nodeCollection)
{
itemCollection.Add(node.Title);
}
return itemCollection;
}
.
我能够获取单个列表项的标题列。但我不知道如何在列表中获取其他字段。假设我有一个名为“年龄”的列。它在SiteMapNode中在哪里?
任何想法?
解决方案
I saw a Demo in CodePlex at : http://spquerydemo.codeplex.com . It presents an extensive sample code for many ways of querying SharePoint.
I've found the solution.
This Code Works like a BOOM. Instead of "SiteMapNode" object you need "PortalListItemSiteMapNode" for indexer to work.
public List<string> GetChachedItems(string webUrl, SPQuery query)
{
SiteMapNodeCollection nodeCollection = new SiteMapNodeCollection();
PortalSiteMapProvider portalProvider = PortalSiteMapProvider.WebSiteMapProvider;
PortalWebSiteMapNode webNode = ((PortalSiteMapNode)portalProvider.CurrentNode).WebNode;
if (webNode != null)
{
nodeCollection = portalProvider.GetCachedListItemsByQuery(
webNode, "test", query, SPContext.Current.Web);
}
List<string> itemCollection = new List<string>();
var listItemNodes = portalProvider.GetCachedListItemsByQuery(
webNode,
"Test", query, SPContext.Current.Web);
foreach (PortalListItemSiteMapNode node in nodeCollection)
{
itemCollection.Add(node.Title + " " + node["age"]);
}
return itemCollection;
}
其他提示
You can use Item
property of SiteMapNode
to gets or sets a custom attribute from the Attributes collection or a resource string based on the specified key!