Я создал пользовательскую проверку с использованием следующего примера кода JS:
(function ($) {
$.validator.unobtrusive.adapters.add('myrule', ['minvalueproperty', 'maxvalueproperty'],
function (options) {
options.rules['myrule'] = options.params;
options.messages['currencyrule'] = options.message;
}
);
$.validator.addMethod('myrule', function (value, element, params) {
return false;
}
} (jQuery));
Код валидатора на стороне сервера:
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class MyValidationAttribute : ValidationAttribute, IClientValidatable
{
public CurrencyValidationAttribute(string minPropertyName, string maxPropertyName)
: base (DefaultErrorMessage)
{
this.minPropertyName = minPropertyName;
this.maxPropertyName = maxPropertyName;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
return new ValidationResult(this.ErrorMessage);
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var clientValidationRule = new ModelClientValidationRule
{
ValidationType = "myrule",
ErrorMessage = this.ErrorMessage,
};
clientValidationRule.ValidationParameters["minvalueproperty"] = minPropertyName;
clientValidationRule.ValidationParameters["maxvalueproperty"] = maxPropertyName;
yield return clientValidationRule;
}
}
Мой класс модели украшен моим пользовательским атрибутом проверки
[MyValidation("MinValue", "MaxValue",
ErrorMessage = "Wrong value, must be between {0} and {1}")]
public string Money { get; set; }
Похоже, что он работает по большей части, кроме отображения сообщений об ошибках. В своем свойстве модели я использовал заменяемую строку с заполнителями, но фактический код пока отсутствует.
Когда я запускал страницу, я вводил какое-то недопустимое значение в текстовое поле и заставлял проверку на стороне клиента возвращать false, забавно то, что сообщение об ошибке, которое я увидел, было
Неверное значение, должно быть между [объект Object] и {1}
Каким-то образом {0} был заменен автоматически. Любая подсказка, по какой причине сообщение об ошибке было заменено?