序言
[ContentType(...)]
public abstract class _BaseSitePage : PageData { ... }
[ContentType(...)]
public abstract class _ContentPage : _BaseSitePage
{
[Display(Name = "Content 1", GroupName = SystemTabNames.Content, Order = 4)]
public virtual ContentArea Content1 { get; set; }
}
public abstract class _FixedBodyLayoutPage : _ContentPage
{
[Display(Name = "Body", GroupName = SystemTabNames.Content, Order = 100)]
public virtual ThreeColumnRowBlock Body{ get; set; }
}
在创建实例期间,_FixedBodyLayoutPage
我想将本地块的实例作为预定义块ThreeColumnRowBlock
放置在其中。Content1
此外,我想在编辑页面上仅显示ThreeColumnRowBlock
实例的属性并隐藏Content1
.
[Editable(false), ScaffoldColumn(false)]
public override ContentArea Content1
{
get { return this.GetPropertyValue(x => base.Content1); }
set { this.SetPropertyValue(x => base.Content1, value); }
}
问题是:我找不到任何合适的方法来注册ThreeColumnRowBlock
Content1 内容区域内的实例。API 需要 ContentReference,但据我所知,本地块没有它。
部分找到的解决方案: 可以使用共享块代替本地块。
但是后来我失去了在没有深度导航的情况下在编辑页面上编辑属性的能力。我想避免很多。所有这些嵌套都打破了 CMS 的概念,更加专注于内容而不是对象的层次结构。
是否有可能以某种方式将本地块绑定到共享块?或者强制episerver在页面编辑器中显示共享块属性?
我还尝试实现 get/set,它提取共享块的实例并返回它而不是本地块。但这并不能欺骗表观服务器。编辑页面显示来自错误实例的数据。