2016-04-07 3 views
0

Я хочу сравнить два поля даты, используя проверку надежной проверки, где второе поле должно быть больше, чем первое поле. Однако оба значения могут быть нулевыми. Даже при использовании PassOnNull = True проверка не выполняется, когда оба поля равны нулю. Это работает, как ожидается, с помощью [GreaterThanOrEqualTo], но моя вторая дата должна быть больше.Foolproof Unobtrusive Validation

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

Рассматривая источник, он обходит проверку, когда любое поле является нулевым (но не тем и другим). Есть ли какие-то соображения по этому поводу? Для меня это не имеет смысла. Я могу легко изменить исходный код, но, будучи установкой 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

Вы можете использовать .change() событие, Array.prototype.every(), .eq(), .valueAsDate свойство input type="date", required атрибут в обоих input type="date" элементов

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>