2016-04-07 12 views
0

İki alanın, ikinci alanın ilk alandan büyük olması gerektiğinde Foolproof doğrulama kullanarak karşılaştırılmasını istiyorum. Ancak, her ikisi de boş olabilir. PassOnNull = True kullanırken bile, her iki alan da boş olduğunda doğrulama başarısız olur. Bu, [GreaterThanOrEqualTo] ile beklendiği gibi çalışır, ancak ikinci tarihim daha büyük olmalıdır. Her iki alanı boş (ama ikisi birden değil) zaman kaynağında bakıldığındaFoolproof Unobtrusive Validation

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

, bu doğrulama atlar. Bunun arkasında bir sebep var mı? Bu benim için gerçekten mantıklı değil. Kaynağı kolayca değiştirebilirim, fakat bir NuGet yüklemesi olarak, üzerine yazılmanın merhametindeyim. Aksi takdirde, bunu manuel olarak ekleyebilir ve yapılabilir.

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; 
    } 

aşağıdaki modifikasyon bana daha mantıklı ben zorunlu alanlar hala kendi doğrulama olurdu çünkü aklınıza gelebilecek hemen hemen her senaryo geçmek:

 if (value1nullish || value2nullish) 
      return true; 

mi var Burada kaynak snippet'idir Bunu doğrulamak için başka bir yol mu, yoksa sadece bir düzeltme ihtiyacı olan FoolProof mu?

cevap

0

Her iki input type="date" unsurlar .change() olayı, Array.prototype.every(), .eq(), input type="date" ait .valueAsDate özelliği, required niteliğini yararlanabilirler

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>

İlgili konular