0

我需要在 Episerver 的 composer 块(类)中添加一个验证器条件,所以我从这个开始:

[PageType("110187CD-89F0-40A8-A075-68944DD5AC1D",

    Name = "New Composer Block", 

    Description = "My Description",

    Filename = "/Templates/Webform1.aspx")]

public class ComposerPage : ComposerPageBase

{

    [PageTypeProperty(

        DisplayInEditMode = false,

        UniqueValuePerLanguage = false,

        Type = typeof(LongString),

        Tab = typeof(ComposerTab))] 

    public virtual string MainArea { get; set; } 

}

并将访问器(getter 和 setter)部分重写为:.....

public virtual string MainArea
        {
            get { return this.GetPropertyValue(p => p.MainArea); }
            set { 
               if(conditionhere)
                    this.SetPropertyValue(p => p.MainArea, "abc");
               else this.SetPropertyValue(p => p.MainArea, value);
                }
        }

但是,编辑页面并没有考虑到我的自定义设置器(它的行为就像我有一个常规的 {get; set;} 而且,在调试期间无法到达设置器上的断点!(非常出乎意料,似乎与 Episerver/PTB 的内部工作有关)。

很感兴趣:

  • 为什么不能像这样调试 TypedPageData(在我的示例中 ComposerPageBase 继承自 TypedPageData)
  • 什么是可接受的解决方法?(需要在设置器中应用验证)
4

1 回答 1

0

使用PageTypeBuilder在通过 UI 编辑内容时,不会调用模型类型的 getter 和 setter 来检索/设置属性值。

相反,它有效地使用了属性索引器。

这与 Episerver 7+ 中的工作方式不同。

这就是在 UI 中编辑该字符串属性时不执行您的代码的原因。但是,如果您通过代码设置值,例如CurrentPage.MainArea = "Some value",您的设置器代码将执行。

澄清一下,这是因为PageTypeBuilder是第三方插件,它不是 Episerver 6 的本机行为。如果您的网站是 Episerver 7+ 网站,您将能够像您预期的那样调试您的代码,因为它具有原生的强类型内容模型。

于 2016-05-18T09:16:32.083 回答