Не уверен, что я поступлю правильно.
Я пытаюсь проверить поле PersonalID на модели, соответствующей некоторым бизнес-правилам.
Метод бизнес-правила принимает PersonalID в виде строки и проходит через некоторые заранее определенные проверки и возвращает логическое значение.
Я создал атрибут PersonalIdValidationAttribute, который наследует атрибут ValidationAttribute и IClientValidatable.
Метод IsValid вызывает бизнес-правило, чтобы определить, действительно ли PersonalID действителен.
Кажется, все это работает так, как задумано. Если я перехожу к проверке на стороне клиента, проверка модели на POSTing работает как положено.
Кажется, что GetClientValidationRules также работают. Вот код:
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule()
{
// Test Error Message
ErrorMessage = "An Error",
ValidationType = "personalidvalidation"
};
yield return rule;
}
Это также создает поле ввода с data-val, как я и ожидал:
<input class="input valid" data-val="true" data-val-length="Rajoitus 30 merkkiä" data-val-length-max="11" data-val-personalidvalidation="An Error" data-val-required="Henkilötunnus on pakollinen" id="PolicyHolder_PersonalID" name="PolicyHolder.PersonalID" type="text" value="">
Теперь я не уверен, разрешено ли мне это делать. В файле сценария я добавляю проверку на стороне клиента:
$.validator.addMethod("personalidvalidation", function (value, element, params) {
var record = { personalID: value };
return $.ajax({
url: "PersonalIdValidation",
data: JSON.stringify(record),
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (response) {
if (response.success) {
console.log('success');
return true;
} else {
console.log('fail');
return false;
}
},
error: function () {
return false;
}
});
});
$.validator.unobtrusive.adapters.add("personalidvalidation", function (options) {
options.rules["personalidvalidation"] = options.params;
options.messages["personalidvalidation"] = options.message;
});
Просмотр вкладки Сеть в консоли разработчика показывает, что вызывается метод контроллера, но сообщение проверки никогда не отображается правильно. Сообщения об успехе и неудаче отображаются в консоли.
Как мне вызвать контроллер с бизнес-логикой для выполнения проверки на стороне клиента по PersonalID?
Заранее спасибо.