首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在EPiServer 8中显示计算出的属性值?

如何在EPiServer 8中显示计算出的属性值?
EN

Stack Overflow用户
提问于 2015-03-13 11:09:09
回答 2查看 784关注 0票数 2

在页面编辑模式中,我希望显示基于页属性值的只读文本。例如,文本可以是“一封内容审查提醒电子邮件将于2015年-10-10发送”,其中的日期是基于页面发布日期+6个月(这个值将是可配置的,因此可以随时更改)。到目前为止,我已经尝试通过在页面上添加另一个属性来完成类似的任务。

我已经将属性CurrentReviewReminderDate添加到我们使用的InformationPage类中。在页面编辑模式下,会显示属性名称,但它没有值。如何在页面编辑模式(最好作为标签)中显示值?

代码语言:javascript
复制
[CultureSpecific]
[Display(
    Name = "Review reminder date",
    Description = "On this date a reminder will be sent to the selected mail to remember to verify page content",
    Order = 110)]
[Editable(false)]
public virtual string CurrentReviewReminderDate
{
    get
    {
        var daysUntilFirstLevelReminder =
            int.Parse(WebConfigurationManager.AppSettings["PageReviewReminder_DaysUntilFirstLevelReminder"]);
        if (CheckPublishedStatus(PagePublishedStatus.Published))
        {
            return StartPublish.AddDays(daysUntilFirstLevelReminder).ToString();
        }
        return "";
    }
    set
    {
        this.SetPropertyValue(p => p.CurrentReviewReminderDate, value);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-17 14:51:00

另一个解决方案是连接到LoadedPage-event并从那里添加值。这可能不是最佳的性能方式,因为你需要做一个CreateWritableClone,但取决于网站,这可能并不重要。

代码语言:javascript
复制
    [InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class EventInitialization : IInitializableModule
{
    public void Initialize(InitializationEngine context)
    {
        ServiceLocator.Current.GetInstance<IContentEvents>().LoadedContent += eventRegistry_LoadedContent;
    }

    void eventRegistry_LoadedContent(object sender, ContentEventArgs e)
    {
        var p = e.Content as EventPage;
        if (p != null)
        {
            p = p.CreateWritableClone() as EventPage;
            p.EventDate = p.StartPublish.AddDays(10);
            e.Content = p;
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2015-03-14 17:48:04

GetPropertyValue在内部使用SetPropertyValue)方法(即在为UI检索内容时与SetPropertyValue)相反。

这是有意义的,否则当保存内容时,您的“合成”值将被存储为真正的值。这将使倒退值等无法实现。

因此,这是EPiServer中的设计(而且非常明智)。:)

但是,您可以通过以下方式自定义属性的工作方式:

  1. 通过应用UI提示使用自定义编辑器
  2. 修改属性元数据(例如,将生成的值显示为文本框中的水印,而不影响保存的实际值)

我可能误解了您想要做的事情,但是从我的头上看,自定义编辑器对于您的用例来说是可行的选择吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29030697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档