如果确认字段不为空,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 比较电子邮件的主要内容,如果未能解决你的问题,请参考以下文章