2016-08-07 6 views
0

データの比較は、フィールドが空でない場合のみ?そうでない場合は、それを行う別の方法は何ですか?確認フィールドが空でない場合にメールを比較

以下のコードは、値があるかどうかに関係なく、常に比較データ注釈をトリガーします。

[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; } 
+0

モデル - ビュー - コントローラタグことに注意してくださいそのパターンについての質問ですASP.NET-MVCの実装には特定のタグがあります。 –

+0

@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; } 
} 
関連する問題