多个字段的共享验证错误消息

本文关键字:验证 错误 消息 共享 字段 | 更新日期: 2023-09-27 17:51:02

. NET MVC项目,我试图验证几个字段对正则表达式。但是,如果其中任何一个失败,我希望只有一个验证消息显示(并突出显示失败的消息)。

我可以为它做一个自定义验证,并用其他类型的工作的id注释其中一个,尽管只突出显示用属性装饰的那个。但在我看来,这是一个过度的,因为我只想把信息减少到一个。

在相同的表单中,我将尝试对两个复选框做相同的操作,两个复选框都必须被选中。

因此,据我所知,如果我使用摘要来放置通用消息,则无法判断复选框或字段是否失败。

是否有一个简单的方法来实现这一点?

多个字段的共享验证错误消息

您可以编写针对整个视图模型类的自定义验证。当我想检查是否设置了至少一个属性时,我写了下面的代码。您可以看到,这是针对类本身的,因此应该给您一条消息。

/// <summary>
/// A configurable class wide attribute that is used to determine if at least one property of a class has received a value.
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class SingleValueConfigurableAttribute : ValidationAttribute, IClientValidatable
{
    public SingleValueConfigurableAttribute(string errorKey)
    { ErrorMessage = Properties.Settings.Default[errorKey].ToString(); }
    public override bool IsValid(object value)
    {
        var typeInfo = value.GetType();
        var propertyInfo = typeInfo.GetProperties();
        return propertyInfo.Any(property => null != property.GetValue(value, null));
    }
    public override string FormatErrorMessage(string name)
    {
        return ErrorMessage;
    }
    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        yield return new ModelClientValidationRule
        {
            ErrorMessage = String.IsNullOrEmpty(ErrorMessage) ? FormatErrorMessage(metadata.DisplayName) : ErrorMessage,
            ValidationType = "enforcetrue"
        };
    }
}