2016-04-07 18 views
0

2番目のフィールドが最初のフィールドよりも大きい必要がある場合、2つの日付フィールドを比較したいと思います。ただし、両方ともヌルにすることができます。 PassOnNull = Trueを使用しても、両方のフィールドがnullの場合、検証は失敗します。これは[GreaterThanOrEqualTo]を使用して期待どおりに動作しますが、私の2番目の日付はより大きくなければなりません。ソース見において完全な妥協のない妥当性確認

[GreaterThan("DateFrom", PassOnNull = true, ErrorMessage = "Date To must be greater than Date From")] 
public DateTime? DateTo { get; set; } 

いずれかのフィールドは、(両方ではない)がnullである場合、それは検証をバイパスします。これの背後には何らかの理由がありますか?これは本当に私には意味をなさない。私は簡単にソースを変更することができますが、NuGetをインストールすると、私はそれを上書きしてしまいます。さもなければ、私はそれを手動で含めることができ、完了することができます。ここでは、ソースの抜粋は次のとおりです。

if (passOnNull) { 

     var isNullish = function (input) { 
      return input == null || input == undefined || input == ""; 
     }; 

     var value1nullish = isNullish(value1); 
     var value2nullish = isNullish(value2); 

     if ((value1nullish && !value2nullish) || (value2nullish && !value1nullish)) 
      return true; 
    } 

次のような変形は、私は必要なフィールドは、まだ合格する独自の検証を持っているであろうからと考えることができ、ほぼすべてのシナリオでは、私に多くの意味があります:

 if (value1nullish || value2nullish) 
      return true; 

があります別の方法として、私はこれを検証する必要がありますか、修正を必要とするFoolProofですか?

答えて

0

あなたは、両方のinput type="date"要素で.change()イベント、Array.prototype.every().eq()input type="date".valueAsDate財産、required属性を利用することができ

var dates = $("input[type=date]"); 
 

 
dates.change(function(e) { 
 
    if (dates.get().every(function(el) { 
 
     return el.valueAsDate !== null 
 
     }) 
 
     && dates.eq(1)[0].valueAsDate > dates.eq(0)[0].valueAsDate) { 
 
     alert(true) 
 
    } else { 
 
     alert(false) 
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<form> 
 
    <input type="date" name="date1" required /> 
 
    <input type="date" name="date2" required /> 
 
    <input type="submit" /> 
 
</form>