在EventsPublishedContent期间更新ReadOnly属性

时间:2018-04-13 15:24:56

标签: c# episerver

首先,我想在我的页面类型中添加一个只读类型属性,这可能吗? 我想要的是一个字符串属性,可以通过编程方式更新,但不能通过UI更新,我希望内容编辑器能够查看值但不能更改它。

假设可以在发布事件期间更新此属性值。

那我该如何......

private void EventsPublishedContent(object sender, ContentEventArgs e)
{

 if (e.Content is MyPageType)
 {

     var myvalue = BussinessLogic.PerformAction(e.content)

      //Now I want to save myvalue on to a property in 
      //e.content.myProperty

  }
}

1 个答案:

答案 0 :(得分:4)

请不要在stackoverflow上询问有关同一主题的多个问题

<强>只读

使用[ReadOnly(true)][Editable(false)]注释创建只读属性。

<强>事件

您要找的是PublishingContent event。有很多方法可以配置这个

大多数人基本上需要在初始化模块中告诉Episerver您希望事件连接到特定IContent类型的特定操作。

From Episerver World

[InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class ContentEventHandler : IInitializableModule
{
    public void Initialize(InitializationEngine context)
    {
        var eventRegistry = ServiceLocator.Current.GetInstance<IContentEvents>();

        eventRegistry.PublishingContent += OnPublishingContent;
    }

    private void OnPublishingContent(object sender, ContentEventArgs e)
    {
        if (e.Content.Name.Contains("BlockType"))
        {
            e.Content.Name = e.Content.Name.Replace("BlockType", "NewName");
        }
    }
}

现在这是非常原始的,通常我实现Alf Nilsson's EPiEventHelper。这样,您将获得实现事件处理的通用方法

来自https://talk.alfnilsson.se/2017/01/11/episerver-event-helper-v3-0/的摘录。您还可以在此处了解有关事件助手的更多信息

[ServiceConfiguration(typeof(IPublishingContent))]
public class PublishingStandardPage : PublishingContentBase<StandardPage>
{
    protected override void PublishingContent(object sender, TypedContentEventArgs e)
    {
        // Here you can access the standard page
        StandardPage standardPage = e.Content;
    }
}