0

Episerver のコンポーザ ブロック (クラス) にバリデータ条件を追加する必要があるため、次から始めました。

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

}

そして、アクセサー (ゲッターとセッター) 部分を次のように書き直しました: .....

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 を介してコンテンツを編集するときに、プロパティ値を取得/設定するためにモデル タイプのゲッターとセッターが呼び出されません。

代わりに、Propertyインデクサーを効果的に使用します。

これは、Episerver 7 以降での動作とは異なります。

これが、その文字列プロパティが UI で編集されたときにコードが実行されない理由です。ただし、 のようなコードで値を設定するとCurrentPage.MainArea = "Some value"、セッター コードが実行されます。

明確にするために、これはPageTypeBuilderがサードパーティのアドオンであり、Episerver 6 のネイティブな動作ではないためです。Web サイトが Episerver 7 以降の Web サイトである場合、期待どおりにコードをデバッグできます。強く型付けされたコンテンツ モデルをネイティブに。

于 2016-05-18T09:16:32.083 に答える