Проверка клиента MVC3 Сообщение об ошибке в формате JS автоматически? - PullRequest
2 голосов
/ 23 февраля 2012

Я создал пользовательскую проверку с использованием следующего примера кода 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} был заменен автоматически. Любая подсказка, по какой причине сообщение об ошибке было заменено?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...