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

时间:2014-03-20 11:47:59

标签: c# asp.net-mvc validation

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

我可以对其进行自定义验证,并使用其他类型工作的id注释其中一个,尽管只突出显示使用该属性修饰的那个。但它看起来像是一种矫枉过正,因为我只想把信息减少到一个。

在同一表格中,我会尝试对两个复选框执行相同操作,两者都必须进行检查。

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

有一种简单的方法可以实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

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

/// <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"
        };
    }
}