我需要在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方法将返回相应的属性值... 感谢.....
答案 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;
}