DataAnnotation比较两个属性

Mar*_*ark 27 .net c# asp.net-mvc data-annotations asp.net-mvc-4

在允许发布表单之前,有没有办法使用数据注释来比较两个表单字段(例如确认电子邮件地址)是否相同?

例如.正则表达式数据注释可以使用匹配函数来引用ViewModel中的另一个属性吗?

dov*_*ove 46

使用CompareAttribute

public string EmailAddress {get; set;}

[Compare(nameof(EmailAddress), ErrorMessage = "Emails mismatch")]
public string VerifiedEmailAddress { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • 在.net核心中它是[比较("EmailAddress",ErrorMessage ="电子邮件不匹配")] (2认同)
  • 使用`[Compare(nameof(EmailAddress),ErrorMessage =“电子邮件不匹配”)]]`,因此,如果将来更改操作名称,您将不会遇到隐藏的错误。 (2认同)

And*_*rei 15

作为一个可能的选项自我验证:

使用方法Validate实现接口IValidatableObject,您可以在其中放置验证代码.

public class TestModel : IValidatableObject
{
    public string Email{ get; set; }
    public string ConfirmEmail { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (Email != ConfirmEmail)
        {
            yield return new ValidationResult("Emails mismatch", new [] { "ConfirmEmail" });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意:这只是服务器端验证.