Local Block作为ContentArea的一部分

时间:2014-11-28 12:59:01

标签: c# properties block episerver episerver-7

Preambula

[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); }
}

问题是:我找不到任何合适的方法在Content1内容区域内注册ThreeColumnRowBlock的实例。 API需要ContentReference,但是从我看到的本地块没有它。

部分找到解决方案: 而不是本地块可以使用共享块。

但是我失去了在没有深度导航的情况下在编辑页面上编辑属性的能力。我想避免很多。所有这些嵌套都打破了CMS的概念,更多地集中在内容而不是对象的层次结构上。

是否有可能以某种方式将本地块绑定到共享块?或强制episerver在页面编辑器中显示共享块属性?

我也尝试实现get / set,它提取共享块的实例并返回它而不是本地块。但这并没有欺骗游戏者。编辑页面显示来自错误实例的数据。

0 个答案:

没有答案