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