最近在 EPiServer 8 中解决了这个问题:
在页面发布之前发生的发布事件(在您的示例中)中,它应该可以正常工作,只需使用 ContentLoader 服务进行比较。ContentLoader 将自动获取已发布的版本。
if (e.Content != null && !ContentReference.IsNullOrEmpty(e.Content.ContentLink))
{
var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
var publishedVersionOfPage = contentLoader.Get<IContent>(e.Content.ContentLink);
}
注意:只适用于已经存在的页面,IE。新页面在电子参数中将有一个空的 ContentLink (ContentReference.Empty)。
至于 PublishedPage 事件,它发生在页面发布之后。您可以使用以下代码段来获取以前发布的版本(如果有):
var cvr = ServiceLocator.Current.GetInstance<IContentVersionRepository>();
IEnumerable<ContentVersion> lastTwoVersions = cvr
.List(page.ContentLink)
.Where(p => p.Status == VersionStatus.PreviouslyPublished || p.Status == VersionStatus.Published)
.OrderByDescending(p => p.Saved)
.Take(2);
if (lastTwoVersions.Count() == 2)
{
// lastTwoVersions now contains the two latest version for comparison
// Or the latter one vs the e.Content object.
}
注意:此答案未考虑本地化。