如何从IPageStructure中找出父页面ID? (复合C1)

时间:2014-02-06 19:08:15

标签: c# asp.net .net c1-cms

这是从UserControl中的Composite C1中的IPageStructure获取页面的parentId的最佳方法吗?

string pPageId = SitemapNavigator.CurrentPageId.ToString();
Guid parentId = connection.Get<IPage>().Where(p => p.Id == new
   Guid(pPageId)).First().GetParentId();

我确实使用当前的pageId作为字符串,这有助于在上面的情况下看到.First()不能在Guid上使用。

2 个答案:

答案 0 :(得分:3)

看看你可以从DataConnection获取的SitemapNavigator实例类 - 当你获得数据绑定实例时,它可以让你以PageNode类的形式访问当前页面访问父,子页面。您还可以访问标题,说明等。

// General (verbose) example - getting parent page ID
using (var connection = new DataConnection())
{
    var currentPageNode = connection.SitemapNavigator.CurrentPageNode;
    var parentPageNode = currentPageNode.ParentPage;
    var parentPageId = parentPageNode.Id;
} 

如果您是从Razor函数执行此操作,则已有可用的数据连接(this.Data),因此上述内容可以这样写:

// Razor example - getting parent page ID    
var parentPageId = Data.SitemapNavigator.CurrentPageNode.ParentPage.Id;

答案 1 :(得分:0)

一种选择就是使用SiteMapProvider功能100%依赖标准的asp.net方式。

获取如下特定节点:var node = SiteMap.CurrentProvider.FindSiteMapNodeByKey("...")。 获取父节点,如下所示:var parentNode = node.ParentNode。 得到这样的ID:var id = parentNode.Key