検証クラスを作成し、EPiServer.validation から IValidate インターフェイスを実装します。これの検証は、PageData および BlockData クラスの外部で行われます。
これはあなたが探しているものでなければなりません
using System.Collections.Generic;
using System.Linq;
using EPiServer.Validation;
public class SliderBlockValidator : IValidate<SliderBlock>
{
public IEnumerable<ValidationError> Validate(SliderBlock instance)
{
var errors = new List<ValidationError>();
if (instance.Slides != null &&
instance.Slides.Contents.Any(x => x.GetType().BaseType != typeof (SlideItemBlock)))
{
errors.Add(new ValidationError()
{
ErrorMessage = "Only SlideItemBlocks are allowed in this area",
PropertyName = "Slides",
Severity = ValidationErrorSeverity.Error,
ValidationType = ValidationErrorType.StorageValidation
});
}
return errors;
}
}
http://sdkbeta.episerver.com/SDK-html-Container/?path=/SdkDocuments/CMS/7/Knowledge%20Base/Developer%20Guide/Validation/Validation.htm&vppRoot=/SdkDocuments//CMS/7でさらに読む/知識%20Base/開発者%20ガイド/
EPi 7.5 にアップグレードした場合は、AllowedTypes アノテーションを使用できます
[AllowedTypes(new [] {typeof(SlideItemBlock)})]
public virtual ContentArea Slides { get; set; }
後の解決策を使用してメッセージをカスタマイズできるかどうかはわかりません。いくつかの既知の制限があります
- ページ上で編集する場合、オーバーレイに対して制限が機能しません。これは修正済みのバグであり、数週間以内にパッチでリリースされる予定です。
- サーバー検証なし。現在、この属性は UI に制限を追加するだけです。サーバー検証のサポートをすぐに追加して、カスタム プロパティを検証できるようにしたいと考えています。
- コンテンツ領域でローカル ブロックを作成するときの検証はありません。新しい機能を使用してローカル ブロックをコンテンツ領域に追加する場合、現在、新しいブロックを作成するときにコンテンツ タイプのフィルタリングは行われません。
詳細については、http://world.episerver.com/Blogs/Linus-Ekstrom/Dates/2013/12/Restriction-of-content-types-in-properties/をご覧ください。
全体として、現在のところ、最初のソリューションの方が優れています。