Проверка JQuery для пользовательского атрибута не работает - PullRequest
1 голос
/ 07 ноября 2010

Я создал собственный атрибут проверки, который проверяет, имеет ли строка заданную минимальную длину

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public sealed class MinimumLengthAttribute : ValidationAttribute
    {
        public int MinLength { get; set; }
        private static string _errorMessage = Messages.MinimumLengthError;

        public MinimumLengthAttribute(int minLength):base(_errorMessage)
        {
            MinLength = minLength;
        }

        public override string FormatErrorMessage(string name)
        {
            var message = String.Format(CultureInfo.CurrentUICulture, ErrorMessageString, name, MinLength);
            return message;
        }

        public override bool IsValid(object value)
        {
            if (value == null)
            {
                return true;
            }
            string valueAsString = value as string;
            return (valueAsString != null && valueAsString.Length >= MinLength);
        }
    }

    public class MinimumLengthValidator : DataAnnotationsModelValidator<MinimumLengthAttribute>
    {
        public MinimumLengthValidator(ModelMetadata metadata, ControllerContext context, MinimumLengthAttribute attribute)
            : base(metadata, context, attribute)
        {
        }

        public override IEnumerable<ModelClientValidationRule>GetClientValidationRules()
        {
            var rule = new ModelClientValidationRule
            {
                ErrorMessage = Attribute.ErrorMessage,
                ValidationType = "checkMinimumLength"
            };
            rule.ValidationParameters.Add("minimumLength", Attribute.MinLength);

            return new[] { rule };
        }
    }

Ниже приведен класс моей модели

public class SignUpViewModel
    {
        [Required]
        [StringLength(100)]
        public string Username { get; set; }

        [Required]
        [MinimumLength(6)]
        public string Password { get; set; }
    }

У меня есть файл jsкоторый содержит логику проверки на стороне клиента следующим образом:

jQuery.validator.addMethod("checkMinimumLength", function (value, element, params) {
    if (this.optional(element)) {
        return true;
    }

    if (value > params.minimumLength) {
        return true;
    }

    return false;
});

Я также зарегистрировал свой пользовательский атрибут в моем файле global.asax, но по какой-то причине, когда я выхожу из текстового поля, я получаю '$.validator.methods [...] 'имеет значение null или не является ошибкой объекта в файле jquery.validate.js.Что я здесь не так делаю?

1 Ответ

0 голосов
/ 13 июля 2011

, если вы используете вместо этого упакованную версию (jquery.validate.pack.js). Вместо этого используйте файл javascript minified version (jquery.validate.min.js).

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