0

我正在连接 Episerver 中的 PublishedContent 事件,因此当用户发布特定页面类型时,会执行一些逻辑(创建 pdf)并将字符串值保存到其中一个属性中。(pdf 的路径)

这是有效的,创建了 PDF 并且还保存了 PDF 的路径。

但是我遇到的问题是发布完成后,所有属性都变为只读,我必须单击另一个节点,然后再次单击该节点,然后才能对其进行编辑。- 这是正常的,还是与我的保存方式有关?

这是我的代码:

public void Initialize(InitializationEngine context)
{
    var events = ServiceLocator.Current.GetInstance<IContentEvents>();
    events.PublishedContent += EventsPublishedContent;
}

private void EventsPublishedContent(object sender, ContentEventArgs e)
{
    if (e.Content is myType)
    {
        var currentPage = e.Content as RatePlanPageType;

        var pdfPath = businessLogic.CreatePdf(e.content);

        var clone = currentPage.CreateWritableClone();

        clone.Property["PdfFiles"].Value = pdfPath;

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

        contentRepository.Save(clone, SaveAction.Save);
    }
}

这就是保存后 UI 中所有属性的样子。

在此处输入图像描述

如果我单击树中的另一个节点,然后再次单击该节点,它会恢复正常并且所有数据都已正确保存。

4

2 回答 2

2

我没有意识到我迷上了错误的方法,把它从

events.PublishedContent = 

events.PublishingContent = 

它工作得很好。

我从 Episerver 世界得到的解释:

您的代码发布了新版本的内容(检查版本小工具以确认这一点)。这意味着您不再查看初稿,因此 UI 将其设为只读。您可以挂钩应该停止此行为的发布事件,或者不在您的 Save 方法中发布新版本的内容。

于 2018-04-16T14:16:44.507 回答
0

如果您想在 PublishedContent 事件上保存克隆的属性数据。那么您必须应用SaveAction.Patch而不是SaveAction.Save

contentRepository.Save(clone, SaveAction.Patch);
于 2018-10-11T10:03:09.733 回答