雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

.NET attribute 验证两个字段相同

2024-10-11 33

在 .NET MVC 中,你可以通过自定义验证特性来验证两个字段是否相同。下面是一些步骤来实现这个功能:

创建一个自定义的验证特性类,如下所示:

using System.ComponentModel.DataAnnotations;

public class CompareFieldsAttribute : ValidationAttribute
{
    private readonly string _otherPropertyName;

    public CompareFieldsAttribute(string otherPropertyName)
    {
        _otherPropertyName = otherPropertyName;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var otherProperty = validationContext.ObjectInstance.GetType().GetProperty(_otherPropertyName);
        var otherPropertyValue = otherProperty.GetValue(validationContext.ObjectInstance, null);

        if (!value.Equals(otherPropertyValue))
        {
            return new ValidationResult($"{_otherPropertyName} 和 {validationContext.DisplayName} 不匹配");
        }

        return ValidationResult.Success;
    }
}

在需要验证的模型中,添加自定义验证特性,并传递另一个属性名称作为参数。例如,如果你需要验证密码和确认密码是否相同,可以将 CompareFieldsAttribute 应用于确认密码属性,如下所示:

using System.ComponentModel.DataAnnotations;

public class RegisterViewModel
{
    [Required]
    public string Password { get; set; }

    [CompareFields("Password")]
    public string ConfirmPassword { get; set; }
}

在这个示例中,我们将 CompareFieldsAttribute 应用于 ConfirmPassword 属性,并将 Password 属性的名称传递给它,以便验证这两个属性的值是否相同。

现在,当你提交表单时,如果 ConfirmPassword 的值与 Password 的值不匹配,将会返回一个验证错误信息,以指出这两个字段不相同。

更新于:1个月前
赞一波!

文章评论

评论问答