我使用的是EPiServer CMS 7.5。我有一个具有LinkItemCollection属性的块。
public virtual LinkItemCollection LinkList { get; set; }
用户可以将任何文档从“资源”窗格拖放到“链接项集合”中。如何阻止用户添加链接项集合中已存在的文档?
答案 0 :(得分: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;
}