自定义验证属性错误消息没有显示ValidationMessageFor

本文关键字:显示 ValidationMessageFor 消息 验证 属性 错误 自定义 | 更新日期: 2023-09-27 18:02:58

我有这个自定义验证:

[AttributeUsage(AttributeTargets.Property)]
public class CollectionNotEmptyAttribute : ValidationAttribute
{
    private const string errorMessage = "'{0}' must have at least one element.";
    public CollectionNotEmptyAttribute()
        : base(errorMessage)
    { 
    }
    public override bool IsValid(object value)
    {
        var collection = value as ICollection;
        if (collection != null)
        {
            return collection.Count > 0;
        }
        return false;
    }
    public override string FormatErrorMessage(string name)
    {
        return String.Format(this.ErrorMessageString, name);
    }
}
我viewmodel

public class ProjectViewModel
{
    public ProjectViewModel()
    {
        this.Users = new Collection<UserProjectViewModel>();
    }
    public int ProjectID { get; set; }
    [CollectionNotEmpty]
    public Collection<UserProjectViewModel> Users { get; set; }
}

我的观点

@Html.ValidationMessageFor(m => m.Users)

验证工作正常,如果集合计数低于1,Model.IsValid返回false,但是没有显示错误消息。

自定义验证属性错误消息没有显示ValidationMessageFor

我认为你应该重写其他IsValid方法:

protected virtual ValidationResult IsValid(
   Object value,
   ValidationContext validationContext
)

,因为它允许你返回ValidationResult与适当的错误信息。

您覆盖的那个只决定结果是否有效