В настоящее время я использую Episerver CMS 10. У меня есть 2 типа страницы следующим образом: 1. Стандартный тип страницы.2. Наследовать стандартный тип страницы
В типе «Стандартная страница» у меня есть свойство Keyword, которое имеет значения в содержимом episerver.Я создал ключевое слово свойства в Inherit standard Page и унаследовал значения стандартной страницы, как показано ниже:
[Display (GroupName = GroupNames.MetaData, Order = 1)]
[Editable(false, AllowInitialValue = true)]
public virtual string Keyword
{
get
{
if (myMaster != null)
{
return myMaster.GetPropertyValue(p =>p.MetaData.Keywords);
}
return string.Empty;
}
set
{
this.SetPropertyValue(p => p.Keyword, value);
}
}
, нотак как значения ключевого слова не были видны в Inheritstandardpagetype, я создал модуль IInitialization
public void Initialize(InitializationEngine context)
{
//Add initialization logic, this method is called once after CMS has been initialized
var contentEvents = ServiceLocator.Current.GetInstance<IContentEvents>();
contentEvents.CreatedContent += InheritedMetadataValues;
//InheritEvents.UpdatedInheritor += InheritEvents_UpdatedInheritor;
}
private void InheritedMetadataValues(object sender, ContentEventArgs e)
{
PopulateMetadata(e);
}
private void PopulateMetadata(ContentEventArgs e)
{
var inheritedPage = e.Content as InheritStandardPageType;
if (inheritedPage != null)
{
var srvcLoc = ServiceLocator.Current.GetInstance<IContentRepository>();
var contentReference = new ContentReference();
contentReference = inheritedPage.MyMasterReference;
//var contentClone = inheritedPage.CreateWritableClone() as InheritStandardPageType;
MasterStandardPageType myMaster = ServiceLocator.Current.GetInstance<IContentRepository>().Get<MasterStandardPageType>(inheritedPage.MyMasterReference);
//inheritedPage.Keyword = myMaster.MetaData.Keywords;
//MasterStandardPageType myMaster => contentReference != null ? ServiceLocator.Current.GetInstance<IContentRepository>().Get<MasterStandardPageType>(MyMasterReference) : null;
inheritedPage.Keyword = myMaster.MetaData.Keywords;
inheritedPage.Desciption = myMaster.MetaData.Description;
inheritedPage.Author = myMaster.MetaData.Author;
/*ontentClone.GlobalMetaData = myMaster.MetaData;*/
srvcLoc.Save(inheritedPage, SaveAction.ForceCurrentVersion, EPiServer.Security.AccessLevel.NoAccess);
}
}
public void Uninitialize(InitializationEngine context)
{
var contentEvents = ServiceLocator.Current.GetInstance<IContentEvents>();
contentEvents.SavedContent -= InheritedMetadataValues;
}
Но проблема, с которой я сталкиваюсь, заключается в том, что мы добавляем какое-либо ключевое слово на стандартной странице и публикуем его снова, тогда только дочерняя страницаобновляется, а также обновляется статус дочерней страницы.Я хотел, чтобы дочерняя страница обновлялась автоматически, если ключевое слово главной страницы имеет значения.