无法获取页面的属性

时间:2019-01-25 21:37:11

标签: asp.net-mvc kentico

我们有带有MVC的Kentico 11.0.26

我有一个可以像这样检索的页面

General mainPage = GeneralProvider.GetGeneral(completeAlias, "en-us", SiteContext.CurrentSiteName)
.Columns("DocumentName", "NodeId", "NodeParentID", "NodeLevel");

现在,我需要获取该节点的同级页面,该页面可能是相同类型,也可能不是相同类型。

为了保留节点顺序,我试图一次调用它们:

var siblings = DocumentHelper
    .GetDocuments()
    .OnSite("mySite")
    .Culture("en-US")
    .Where(d => d.NodeParentID == mainPage.NodeParentID && d.NodeLevel == mainPage.NodeLevel)
    .OrderBy(d => d.NodeOrder)
    .ToList();

但是我无法检索仅在一种页面类型中存在的字段值。以下引发空引用异常:

foreach (var item in siblings)
{
    string colValue = item.GetValue("myColumn").ToString();
}

如何检索仅存在于一种页面类型中的字段值(并非每个兄弟姐妹都具有此列)?

2 个答案:

答案 0 :(得分:1)

在文档查询中同时使用.Types()和.WithCoupledColumns()来检索多种页面类型的列值很重要。

https://docs.kentico.com/k11/custom-development/working-with-pages-in-the-api

var siblings = DocumentHelper
                .GetDocuments()
                .Types("MySite.General","MySite.Link")
                .WithCoupledColumns()
                .OnSite("MySite")
                .Culture("en-US")
                .Published();

答案 1 :(得分:0)

您可以使用.TryGetValue代替GetValue

var colValue;
item.TryGetValue("myColumn", out colValue);

或先检查类名,然后获取值,即item.GetValue("ClassName")