После этого сообщения Выполнить проверку на стороне клиента для пользовательского атрибута
Я пытаюсь понять, как это сделать, передавая дополнительные параметры клиентскому сценарию
Насколько я понимаю, для реализации пользовательской проверки с помощью MVC 3 требуется следующее
Создание пользовательского атрибута проверки
На основе атрибута Validation и реализации IClientValidatable. Я также видел несколько примеров, полученных из ModelValidator, который, кажется, реализует функциональность как ValidationAttribute, так и IClientValidatable. Так что это моя первая путаница в отношении различий или того, использовался ли 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 */ ;
},
''
);
Мой вопрос здесь заключается в том, является ли подпись 'function (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 (value, element, params)' и будет ответственна за извлечение ненавязчивых тегов в структуру данных, которая может быть понята jQuery.Validation. Из примера кода мне кажется, что options - это объект, который содержит оба значения атрибута из тега (например, options.message) и соответствующие свойства jQuery, с которыми он должен сопоставляться (например, options.messages ['ClientSideValidationFunctionName'] Если так, как пользовательские параметры извлекаются и отображаются.
Надеюсь, я не добавил никакой дополнительной путаницы.