从 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;
}
我需要获取 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;
}