gpt4 book ai didi

EpiServer - 以编程方式将 block 添加到内容区域

转载 作者:行者123 更新时间:2023-12-04 13:59:47 25 4
gpt4 key购买 nike

我有一个包含一些 block 的内容区域,这些 block 的某些属性必须使用来自 SQL 查询的数据进行初始化,所以在 Controller 中我有这样的东西:

foreach (ObjectType item in MyList)
{
BlockData currentObject = new BlockData
{
BlockDataProperty1 = item.ItemProperty1,
BlockDataProperty2 = item.ItemProperty2
};
/*Dont know what to do here*/
}

我需要的是与 currentObject 合作作为一个 block ,并将其添加到我在另一个 block 中定义的内容区域。我尝试使用

myContentArea.Add(currentObject)

但它说它不能将对象添加到内容区域,因为它需要一个 IContent类型。

如何将该对象转换为 IContent ?

最佳答案

要在 EPiServer 中创建内容,您需要使用 IContentRepository 的实例。而不是 new运算符(operator):

var repo = ServiceLocator.Current.GetInstance<IContentRepository>();

// create writable clone of the target block to be able to update its content area
var writableTargetBlock = (MyTargetBlock) targetBlock.CreateWritableClone();

// create and publish a new block with data fetched from SQL query
var newBlock = repo.GetDefault<MyAwesomeBlock>(ContentReference.GlobalBlockFolder);

newBlock.SomeProperty1 = item.ItemProperty1;
newBlock.SomeProperty2 = item.ItemProperty2;

repo.Save((IContent) newBlock, SaveAction.Publish);

之后,您将能够将 block 添加到内容区域:

// add new block to the target block content area
writableTargetBlock.MyContentArea.Items.Add(new ContentAreaItem
{
ContentLink = ((IContent) newBlock).ContentLink
});

repo.Save((IContent) writableTargetBlock, SaveAction.Publish);

EPiServer 在运行时为 block 创建代理对象并实现 IContent界面。当您需要使用 IContent block 上的成员,将其转换为 IContent明确地。

当您使用 new 创建 block 时运算符,它们不会保存在数据库中。另一个问题是内容区域不接受这样的对象,因为它们没有实现 IContent接口(interface)(您需要从 IContentRepository 获取 block ,它会在运行时创建代理)。

关于EpiServer - 以编程方式将 block 添加到内容区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27993939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com