Episerver默认未启用Update modified date的原因及全局配置问询
关于Episerver中Update Modified Date的问题解答
1. 为何即使在发布事件中,修改日期仍默认不更新?
Episerver默认不勾选该选项,核心是为了区分草稿保存和正式发布两种场景的业务需求:
- 草稿阶段用户可能频繁编辑保存,若自动更新修改日期,会导致该字段频繁变动,不利于内容版本的追溯和审计(比如区分“草稿迭代”和“正式变更”)。
- 发布动作默认不触发修改日期更新,是因为系统设计上把“发布”视为将现有草稿推送到线上的操作,而非内容本身的实质性修改——如果用户没有特意勾选,系统默认认为这次发布不需要修改日期同步变更,留给用户自主判断是否需要标记该内容为“已修改并发布”。
2. 全局启用设置、影响及替代方案
是否支持全局启用?
支持,可通过代码层面实现全局自动启用:
- 订阅
ContentPublished事件,在内容发布时强制更新ModifiedDate字段:
[InitializableModule] [ModuleDependency(typeof(EPiServer.Web.InitializationModule))] public class ModifiedDateInitializer : IInitializableModule { public void Initialize(InitializationEngine context) { var contentEvents = ServiceLocator.Current.GetInstance<IContentEvents>(); contentEvents.PublishedContent += ContentEvents_PublishedContent; } private void ContentEvents_PublishedContent(object sender, ContentEventArgs e) { var content = e.Content as IContent; if (content != null) { var writableContent = content.CreateWritableClone() as IContent; writableContent.Modified = DateTime.Now; DataFactory.Instance.Save(writableContent, SaveAction.Publish, AccessLevel.NoAccess); } } public void Uninitialize(InitializationEngine context) { var contentEvents = ServiceLocator.Current.GetInstance<IContentEvents>(); contentEvents.PublishedContent -= ContentEvents_PublishedContent; } }
- 也可以通过自定义内容类型的元数据,强制设置
UpdateModifiedDate默认值为true。
全局启用对现有内容的影响
- 现有已发布/保存的内容不会自动回溯更新修改日期,只有全局启用后发生的发布/保存动作才会触发修改日期更新。
- 如果业务中有依赖
ModifiedDate的逻辑(比如内容排序、审计报表、缓存策略),需要评估新的更新规则是否会影响这些业务流程。
是否建议全局启用?
是否全局启用取决于业务需求:
- 如果业务要求每一次发布都必须标记内容为已修改,全局启用是高效的方案。
- 如果部分内容类型(比如静态页面、基础配置)不需要在发布时更新修改日期,全局启用反而会造成不必要的字段变动,这种情况更适合逐个内容设置或针对特定内容类型做事件监听。
替代方案
- 事件监听定向处理:只针对特定内容类型(如Article、News)订阅发布事件,更新修改日期,不需要全局覆盖。
- 批量设置现有内容:使用Episerver的批量编辑工具,筛选需要开启的内容,批量勾选
Update Modified Date选项。 - 自定义属性:创建继承自
DateTime的自定义属性,在属性保存时自动同步修改日期,替代原生的ModifiedDate字段。
内容的提问来源于stack exchange,提问作者Farhin Shaikh
相关产品推荐
相关产品推荐

