从episerver中的特定页面获取特定属性值

时间:2017-11-24 11:12:42

标签: episerver

我需要在episerver中获取用户给定页面的用户给定属性的属性值... 为此,我写了一个方法..

 public string GetContent(string pageName, string propertyName)
    {
        var contentTypeRepo = ServiceLocator.Current.GetInstance<IContentTypeRepository>();
        IEnumerable<ContentType> allPageTypes = contentTypeRepo.List();
        var currentpage = allPageTypes.Where(x => x.Name.ToLower() == pageName);
        var pageId = currentpage.First().ID;
        var pageRef = new PageReference(pageId);
        var contentRepository = ServiceLocator.Current.GetInstance<IContentRepository>();
        var page = contentRepository.Get<PageData>(pageRef);
        var content = page.GetPropertyValue(propertyName);
        return content;
    }

但是我无法通过pageType ID获得正确的页面...它得到了一些其他页面......所以这就是我的要求...... 用户给出页面名称和属性名称,get方法将返回相应的属性值... 感谢.....

2 个答案:

答案 0 :(得分:0)

这是因为您使用类型页面的ID获取页面。巧合的是,有一个页面与您解析的页面类型具有相同的ID。

但是,您不需要在方法中解析页面类型。而是将ContentReference对象作为参数传递给您的方法,以指定要获取的页面。

您方法的重构版本:

public static object GetContentProperty(ContentReference contentLink, string propertyName)
{
   var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();

   var content = contentLoader.Get<IContent>(contentLink);

   return content.GetPropertyValue(propertyName);
}

此外,您应该使用IContentLoader来获取内容,除非您还需要修改/保存内容。

答案 1 :(得分:0)

Episerver World也提出了这个问题,我也在这里写了答案。 _pageCriteriaQueryService是通过类中的构造函数注入注入的。

即使这会通过其pagename和propertyname从页面获取属性值,也不建议像这样编码。

首先,我会回过头来了解为什么存在这种需求,您将在何处以及如何使用您的功能?

public string GetPropertyValueByPageNameAndPropertyName(string pageName, string propertyName)
    {
        var criteria = new PropertyCriteriaCollection
        {
            new PropertyCriteria()
            {
                Name = "PageName",
                Type = PropertyDataType.String,
                Condition = CompareCondition.Equal,
                Value = pageName
            }
        };

        var pages = _pageCriteriaQueryService.FindPagesWithCriteria(ContentReference.StartPage, criteria);

        if (pages != null && pages.Count > 0)
        {
            return pages[0].GetPropertyValue(propertyName);
        }

        return string.Empty;
    }