1

EPiServer CMS 7.5 を使用しています。LinkItemCollection プロパティを持つブロックがあります。

public virtual LinkItemCollection LinkList { get; set; }

ユーザーは、アセット ペインからリンク アイテム コレクションに任意のドキュメントをドラッグ アンド ドロップできます。ユーザーがリンク アイテム コレクションに既に存在するドキュメントを追加できないようにするにはどうすればよいですか?

4

1 に答える 1

1

わかりました、フォーム編集モードでリンク アイテム コレクションの重複をチェックする方法を見つけました。

コレクション内の重複をチェックするヘルパー クラスを作成しました。

public static class EnumerableExtensions
    {
        public static bool HasDuplicates<T>(this IEnumerable<T> subjects)
        {
            return HasDuplicates(subjects, EqualityComparer<T>.Default);
        }

        public static bool HasDuplicates<T>(this IEnumerable<T> subjects, IEqualityComparer<T> comparer)
        {
            if (subjects == null)
                throw new ArgumentNullException("subjects");

            if (comparer == null)
                throw new ArgumentNullException("comparer");

            var set = new HashSet<T>(comparer);

            foreach (var s in subjects)
                if (!set.Add(s))
                    return true;

            return false;
        }

次に、リンク アイテム コレクションのカスタム バリデーターを作成しました。

public class LinkItemCollectionValidator : IValidate<LinkItemCollection>
    {
        public IEnumerable<ValidationError> Validate(LinkItemCollection instance)
        {
            var errors = new List<ValidationError>();                                                
            List<string> list = new List<string>();

            foreach (var i in instance)
            {
                list.Add(i.Text);
            }

            if (list.HasDuplicates())
            {
                errors.Add(new ValidationError()
                {
                    ErrorMessage = "Duplicate content is not allowed",
                    PropertyName = "LinkList",
                    Severity = ValidationErrorSeverity.Error,
                    ValidationType = ValidationErrorType.StorageValidation
                });
            }

            return errors;
        }
于 2014-08-05T07:45:26.790 に答える