获取 Orchard 中自定义部分的媒体选择器字段内容
Get media picker field content of a custom part in Orchard
我使用内容选择器字段创建了自定义部分。
public int UpdateFrom1()
{
ContentDefinitionManager.AlterPartDefinition("BackgroundPart",
builder => builder.WithField("BackgroundImage",
fieldBuilder => fieldBuilder
.OfType("MediaPickerField")
.WithDisplayName("Background Image")));
return 2;
}
public int UpdateFrom2()
{
ContentDefinitionManager.AlterTypeDefinition("Background", cfg => cfg
.WithPart("BackgroundPart")
.Creatable()
.Indexed());
return 3;
}
获取数据的服务代码:
public class BackgroundService : IBackgroundService
{
private readonly IRepository<BackgroundPartRecord> _repository;
public BackgroundService(
IRepository<BackgroundPartRecord> repository,
ISignals signals)
{
_repository = repository;
}
public IEnumerable<BackgroundPartRecord> Get()
{
return _repository.Table;
}
}
这有效(我可以在创建此类新项目时选择内容)。
现在我想获取我的类型的所有项目的列表。我为此创建了一项服务,并获得了我创建的项目的列表。但是列表中的项目没有媒体选择器字段。我如何获得此内容?我想在我的模块中的 FilterProvider class 的 OnResultExecuting 方法中使用它。
这行不通,因为您正在使用存储库 API。 Repository 是内部使用的低级 API,但如果被模块使用的话,应该很少使用。原因之一是它不会获取内容项,只是部分记录。
相反,您需要使用来自 ContentManager 的查询 API 之一。这将为您提供真正的内容项,您可以对其执行 As
,这将使您能够访问内容项的字段(这些字段存储在内容项记录中的信息集中)等
这个或重载和扩展方法之一应该可以解决问题:
_contentManager.Query<BackgroundPart>()
我使用内容选择器字段创建了自定义部分。
public int UpdateFrom1()
{
ContentDefinitionManager.AlterPartDefinition("BackgroundPart",
builder => builder.WithField("BackgroundImage",
fieldBuilder => fieldBuilder
.OfType("MediaPickerField")
.WithDisplayName("Background Image")));
return 2;
}
public int UpdateFrom2()
{
ContentDefinitionManager.AlterTypeDefinition("Background", cfg => cfg
.WithPart("BackgroundPart")
.Creatable()
.Indexed());
return 3;
}
获取数据的服务代码:
public class BackgroundService : IBackgroundService
{
private readonly IRepository<BackgroundPartRecord> _repository;
public BackgroundService(
IRepository<BackgroundPartRecord> repository,
ISignals signals)
{
_repository = repository;
}
public IEnumerable<BackgroundPartRecord> Get()
{
return _repository.Table;
}
}
这有效(我可以在创建此类新项目时选择内容)。
现在我想获取我的类型的所有项目的列表。我为此创建了一项服务,并获得了我创建的项目的列表。但是列表中的项目没有媒体选择器字段。我如何获得此内容?我想在我的模块中的 FilterProvider class 的 OnResultExecuting 方法中使用它。
这行不通,因为您正在使用存储库 API。 Repository 是内部使用的低级 API,但如果被模块使用的话,应该很少使用。原因之一是它不会获取内容项,只是部分记录。
相反,您需要使用来自 ContentManager 的查询 API 之一。这将为您提供真正的内容项,您可以对其执行 As
,这将使您能够访问内容项的字段(这些字段存储在内容项记录中的信息集中)等
这个或重载和扩展方法之一应该可以解决问题:
_contentManager.Query<BackgroundPart>()