加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 19:09:56 所属栏目:asp.Net 来源:网络整理
导读:想要创建自定义数据注释验证。有没有什么有用的指南/样本如何创建? 首先: 带有最小和最大长度的StringLength。我知道.NET 4可以做到这一点,但想在.NET 3.5中做同样的,如果可能的话,只能定义最小长度(至少x chars),最大长度(最多x个字符),或两者(x和y
想要创建自定义数据注释验证。有没有什么有用的指南/样本如何创建?

首先:
带有最小和最大长度的StringLength。我知道.NET 4可以做到这一点,但想在.NET 3.5中做同样的,如果可能的话,只能定义最小长度(至少x chars),最大长度(最多x个字符),或两者(x和y字符之间)。

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

更新:
解决第二个问题,只是复制JavaScript实现和做一些调整的情况下,所以不需要一个解决方案。

解决方法

要创建自定义数据注记验证器,请按照以下gudelines:

>你的类必须继承System.ComponentModel.DataAnnotations.ValidationAttribute类。
>覆盖bool IsValid(对象值)方法并在其中实现验证逻辑。

而已。

重要警告

有时开发人员检查该值不为null / empty并返回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)]

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

重要

所以这个验证器仍然可以处理你不需要的模型值,但是当它存在时,它会验证(在Web表单中考虑一个文本字段,这不是必需的,但是如果用户输入一个值,它必须是有效的) 。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读