创建一个返回多个错误消息的自定义ValidationAttribute类

时间:2015-05-05 13:24:42

标签: c# asp.net asp.net-mvc validation asp.net-mvc-4

我有一个这样的模型:

[IsValidInput]
public class Input
{
    //different properties
}

使用如下自定义验证属性:

[AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class IsValidInput : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        try
        {
            ExternalValidator.Validate(value);
        }
        catch (CustomException ex)
        {
            foreach(var errorText in ex.GetDescriptions())
            {
                this.ErrorMessage = this.ErrorMessage + errorText;
            }
            return false;
        }
        return true;
    }
}

现在我有一个包含多个错误的ErrorMessage对象。我想以某种方式返回多个ErrorMessage对象,以便在我的视图中我将有一个包含多个列表项的列表,如下所示:

  • 验证错误1
  • 验证错误2

如何返回ErrorMessages列表以实现此目的?

3 个答案:

答案 0 :(得分:0)

查看此解决方案: http://www.codeproject.com/Articles/234096/Multiple-Custom-DataAnnotations-on-Same-Field-With

1)使用静态字段,该字段将跟踪每个字段或属性有多少属性,并根据计数,在为每个字段生成的每个下一个规则的ValidationType中附加字母a,b,c ...田地或财产。

2)提供自定义HTML帮助器来渲染字段的编辑器;然后,HTML Helper将解析该字段上的所有“HTML-5 data-val”属性,并将它们转换为字段所需的多条规则(客户端规则,不会更改服务器端代码上的任何内容)。

3)为客户端验证此自定义验证属性提供两个适配器和验证函数,如果字段上只有一个Attribute实例(即RequiredIf),则为另一个,当有多个Attribute实例时在场上(即RequiredIfMultiple)。

答案 1 :(得分:0)

您好,您可以返回简单的ValidationResult类而不是boolean:

chrome

答案 2 :(得分:0)

我找到了解决方法:

我会在错误信息中添加一些像这样的html标签:

foreach(var errorText in ex.GetDescriptions())
{
    this.ErrorMessage = this.ErrorMessage + txt + @"</li><li>";
}
this.ErrorMessage = this.ErrorMessage.Remove(this.ErrorMessage.Length - 4);

在我的视图中添加@ Html.Raw:

@if (Html.ValidationSummary() != null) { @Html.Raw(HttpUtility.HtmlDecode(Html.ValidationSummary().ToString())); } 

这会给我带有我想要的验证结果的html列表。