Episerver - 拦截 PublishedContent 事件时页面类型变为 None 可编辑

Episerver - Page Type Becomes None Editable when intercepting PublishedContent Event

我正在连接到 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 中所有属性的样子。

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

没想到自己上错方法了,改成

events.PublishedContent = 

events.PublishingContent = 

而且效果很好。

我从 Episerver world 得到的解释:

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

如果您想在 PublishedContent event.then 上保存克隆的 属性 数据,您必须应用 SaveAction.Patch 而不是 SaveAction.Save

contentRepository.Save(clone, SaveAction.Patch);