如果确认字段不为空,MVC 比较电子邮件

Posted

技术标签:

【中文标题】如果确认字段不为空,MVC 比较电子邮件【英文标题】:MVC Compare email if confirm field is not empty 【发布时间】:2016-12-13 13:39:16 【问题描述】:

只有当字段不为空时,有没有办法触发比较数据注释?如果没有,还有什么方法可以做到?

下面的这段代码总是触发比较数据注释,不管它是否有值。

[EmailAddress]
[Required]
[Display(Name = "Email Address")]
public string EmailAddress  get; set; 

[Display(Name = "Confirm Email Address")]
[Compare("EmailAddress", ErrorMessage = "The email addresses do not match.")]
public string ConfirmEmailAddress  get; set; 

【问题讨论】:

请注意,model-view-controller 标签是针对有关模式的问题。 ASP.NET-MVC 实现有一个特定的标记。 @StephenMuecke。哦,好吧...我看到您已经编辑了标签。明白了。 【参考方案1】:

用你自己的扩展属性可能是最简单的:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public sealed class CompareEnhancedAttribute : CompareAttribute

    public bool AllowEmptyStrings  get; set; 

    public CompareEnhancedAttribute(string otherProperty)
        : base(otherProperty)
    
    

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    
        if (AllowEmptyStrings && string.IsNullOrEmpty(value?.ToString()))
        
            return ValidationResult.Success;
        
        else
        
            return base.IsValid(value, validationContext);
        
    

然后像这样使用它:

public sealed class ContactModel

    /* omitted other attributes */

    public string EmailAddress  get; set; 

    [CompareEnhanced("EmailAddress", AllowEmptyStrings = true)]
    public string ConfirmEmailAddress  get; set; 

【讨论】:

以上是关于如果确认字段不为空,MVC 比较电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何确保至少一个字段不为空?(如果只有一个不为空就可以)

验证电子邮件字段不为空 Javascript

如何在提交表单之前验证电子邮件字段不为空

仅当字段不为空时才进行电子邮件验证

Angular 5 - 表单验证电子邮件

MVC 4 中的延迟电子邮件确认