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

Getting particular property value from particular page in 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 方法将 return 对应的 属性 值... 谢谢.....

那是因为您得到的 页面 的页面 ID 为 type。巧合的是有一个页面和你解析的页面类型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 来获取内容,除非您还需要 modify/save 内容。

这个问题在Episerver World上也有人问过,我也把答案写在这里。 _pageCriteriaQueryService 通过构造函数注入注入 class.

尽管这会通过页面名称和 属性 名称为您获取页面的 属性 值,但不建议这样编码。

首先我会回去找出为什么存在这个需求,你打算在哪里以及如何使用你的功能?

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;
    }