如何找到PageNode的页面类型? (复合C1)

时间:2012-08-27 11:50:34

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

我想构建一个ASP.NET用户控件,它显示主页导航,包括仅某个页面类型的页面(我将其命名为ContentPage)。

在已发布页面的数据库表中,每个页面都显示此信息(列PageTypeID),但我无法通过我的代码中的Composite API找到任何方法来访问它。

using(var conn = new DataConnection())
{
    var siteMapNav = new SitemapNavigator(conn);
    var pages = siteMapNav.CurrentHomePageNode.GetPageNodes(SitemapScope.DescendantsAndCurrent);
    // what now?
}

如何从C#访问页面的PageType信息?

2 个答案:

答案 0 :(得分:2)

您可以使用数据连接在IPage.PageTypeId上查找页面类型,然后合并SitemapNavigator的结果:

using (var conn = new DataConnection())
{
    Guid pageTypeIdInQuestion = Guid.Empty; // put type id here

    var siteMapNav = new SitemapNavigator(conn);
    var pagesOfDesiredType = conn.Get<IPage>().Where(f => f.PageTypeId == pageTypeIdInQuestion).Select(f => f.Id);
    var pages = siteMapNav.CurrentHomePageNode.GetPageNodes(SitemapScope.DescendantsAndCurrent).Where(f=> pagesOfDesiredType.Contains(f.Id));
}

考虑缓存您在此处获得的结果,并在IPage和IPageStructure上使用add/update/delete events进行刷新。

答案 1 :(得分:0)

string pageType = null;
using (var conn = new DataConnection())
{
    var currentPageId = HomePageNode.Id;
    var pageTypeId = conn.Get<IPage>().Where( p => p.Id == currentPageId ).Select( p => p.PageTypeId ).Single();
    pageType = conn.Get<IPageType>().Where(pt => pt.Id == pageTypeId ).Select(pt => pt.Name).Single();
}