Есть много вещей, которые могут пойти не так, в том числе код, который вы разместили:
Как выглядит ваш сгенерированный HTML для <input>
?Включает ли он атрибут data-val-custrequired
?
Если нет, вы не забыли добавить интерфейс в объявлении класса - IClientValidatable
?
Вы не забыли не добавить свой собственный валидатор в обработчик DOM ready
?(т.е. не используйте $(document).ready()
или $(function() { ... })
) - проверка должна быть настроена до того, как документ будет готов.
ETA : причинапоследний из них заключается в том, что jquery.validate.unobtrusive
делает это:
$(function () {
$jQval.unobtrusive.parse(document);
});
Т.е. он анализирует документ на наличие проверочных атрибутов, правил и т. д. в готовом документе.Поскольку этот скрипт должен быть загружен для регистрации ваших адаптеров, ваш регистрационный скрипт обычно должен идти через после jquery.validate.unobtrusive.js
.Но это также делает любой зарегистрированный обработчик .ready
именуемым после «ненавязчивым» - к этому моменту уже слишком поздно.Я думаю, вы могли бы поставить свой сценарий регистрации раньше, а затем использовать .ready
.Никогда не пробовал, и я никогда не видел, чтобы это было сделано.
Кроме того, в этом случае этого должно быть достаточно для регистрации адаптера:
$.validator.addMethod('custrequired', function(value, element, param) {
return value && value !== '99:99' && value !== '9:99';
});
jQuery.validator.unobtrusive.adapters.addBool('custrequired');
Это все равно добавит любую пользовательскую ошибкусообщение, которое вы можете получить, но поскольку ваш валидатор не использует дополнительные параметры (такие как, например, StringLength
pass MaximumLength
и т. д.), пользовательский адаптер не требуется.