После этого сообщения Выполните проверку на стороне клиента для настраиваемого атрибута
Я пытаюсь понять, как это сделать, передавая дополнительные параметры клиентской стороне script
Насколько я понимаю до сих пор, чтобы выполнить выборочную проверку с помощью MVC 3, требуется следующее
Создать собственный атрибут проверки
На основе ValidationAttribute и реализации IClientValidatable. Я также вижу некоторые примеры из ModelValidator, которые, как представляется, реализуют функциональность как ValidationAttribute, так и IClientValidatable. Итак, это мой первый момент путаницы в отношении того, что такое diffirences или ModelValidator использовался в MVC 2, но теперь он устарел или что?
Экземпляр ModelClientValidationRule должен быть возвращен из GetClientValidationRules(), чтобы указать такие данные, как сообщение об ошибке, ValidationType (который я понимаю как имя функции Javascript, которая будет выполнять проверку на стороне клиента) и любые дополнительные пользовательские параметры что атрибут может иметь, и что необходимо передать на проверку Javascript.
Я предполагаю, что среда выполнения (не уверен, какая ее часть) использует ModelClientValidationRule
для генерации атрибута html в элементах тега следующим образом:
data-val="true" (to indicate that the element requires validation)
data-val-[ValidationType]=[ErrorMessage]
data-val-[ValidationType].[ValidationParameters(n).Key]=[ValidationParameters(n).Value]
Реализация клиентской логики проверки
Функция javascript должна быть создана и добавлена в jQuery.validators с jQuery.validators.addmethod(), чтобы JQuery знал об этом, когда это нужно выполнить. Что-то вроде:
jQuery.validator.addMethod(
'greaterThan',
function (value, element, params) {
/.../
return /* true or false */ ;
},
''
);
Мой вопрос здесь в том, является ли функция подписи (value, element, params) стандартным для методов, которые будут обрабатывать проверку, и я предполагаю, что она будет вызвана некоторыми функциями jQuery в соответствующее время, например, перед отправкой формы или когда элемент теряет fuces или события keyUp. Я просто не согласен с тем, как вы можете контролировать это, то есть выберите, какое событие является подходящим для вашей пользовательской проверки.
Внедрить ненавязчивый адаптер
Это переводит ненавязчивые атрибуты; что-то я не очень понимаю, но предполагаю, что это правило jQuery, но я не понимаю, как это работает. Что-то вроде
jQuery.validator.unobtrusive.adapters.add(
'futuredate',
{ },
function (options) {
options.rules['greaterThan'] = true;
options.messages['greaterThan'] = options.message;
}
);
Мой вопрос здесь о 'function (options)'. Является ли это функцией, которая будет вызываться до "function (value, element, params)" и отвечает за извлечение ненавязчивых тегов в структуру данных, которая может быть понята jQuery.Validation. Из примера кода мне кажется, что параметры - это объект, который содержит оба значения атрибута из тега (например, options.message) и соответствующие свойства jQuery, на которые он должен сопоставляться (например, options.messages ['ClientSideValidationFunctionName'] Если это так, как настраиваемые параметры извлекаются и отображаются.
Надеюсь, я не добавил никаких дополнительных замешательств.