asp.net - 如何创建自定义数据注释验证器

标签 asp.net asp.net-mvc-2 data-annotations

想要创建自定义数据注释验证。有关于如何创建它们的有用指南/示例吗?

首先:
StringLength 具有最小和最大长度。我知道 .NET 4 可以做到这一点,但希望在 .NET 3.5 中执行相同的操作,如果可能的话,能够仅定义最小长度(至少 x 个字符)、仅定义最大长度(最多 x 个字符)或两者(x 和 y 字符之间)。

其次:
使用模运算进行验证 - 如果数字是有效长度,我希望使用模 11 算法进行验证(我已经在 J​​avaScript 中实现了它,所以我想这只是一个简单的移植?)

更新:
解决了第二个问题,只是复制 JavaScript 实现并进行一些调整,因此不需要解决方案。

最佳答案

要创建自定义数据注释验证器,请遵循以下指南:

  1. 您的类必须继承自 System.ComponentModel.DataAnnotations.ValidationAttribute 类。
  2. 重写 bool IsValid(object value) 方法并在其中实现验证逻辑。

就是这样。

重要警告

有时开发人员会检查该值不为 null/空并返回 false。这通常是不正确的行为,因为这是必需验证器检查的,这意味着您的自定义验证器应该只验证非空数据但返回true否则(参见示例)。这将使它们可用于必填(必填)和非必填字段。

示例

public class StringLengthRangeAttribute : ValidationAttribute
{
    public int Minimum { get; set; }
    public int Maximum { get; set; }

    public StringLengthRangeAttribute()
    {
        this.Minimum = 0;
        this.Maximum = int.MaxValue;
    }

    public override bool IsValid(object value)
    {
        string strValue = value as string;
        if (!string.IsNullOrEmpty(strValue))
        {
            int len = strValue.Length;
            return len >= this.Minimum && len <= this.Maximum;
        }
        return true;
    }
}

所有属性都可以根据您的需要在属性中设置。
一些例子:

[Required]
[StringLengthRange(Minimum = 10, ErrorMessage = "Must be >10 characters.")]

[StringLengthRange(Maximum = 20)]

[Required]
[StringLengthRange(Minimum = 10, Maximum = 20)]

当未设置特定属性时,其值将在构造函数中设置,因此它始终有一个值。在上面的使用示例中,我还特意添加了 Required 验证器,因此它与我编写的上述警告同步。

重要

因此,此验证器仍将对不需要的模型值起作用,但是当它出现时,它会进行验证(想想网络表单中的文本字段,这不是必需的,但如果用户在其中输入值,则必须有效)。

关于asp.net - 如何创建自定义数据注释验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3413715/

相关文章:

c# - 如何使用 ASP.net C# 将 HTTP Post 请求发送到套接字

asp.net-mvc - 我可以根据条件显示/隐藏带有数据注释的 View 模型元素吗?

asp.net-mvc - 整数值的必需属性

c# - 如何获取带有参数的本地化属性错误消息?

asp.net - 标题的背景图像不起作用

asp.net - 如何强制 ASP.NET Web 服务仅公开 HTTP-POST 接口(interface)

c# - HTML 编码 block - 无效的表达式项 ':'

asp.net-mvc - 在 MVC 网站上获取 404 错误

c# - 在 ASP.NET MVC5 上设置值后,静态属性在每个请求中始终为 null

visual-studio-2010 - 从命令行运行web.config转换