如何在ASP.NET MVC中本地化自定义ValidationAttribute

时间:2016-10-13 20:46:50

标签: c# asp.net asp.net-mvc

以下代码是我为我的爱好项目编写的自定义验证属性,我想要做的是自定义此验证属性的错误消息。我已声明" ErrorMessageResourceType"和" ErrorMessageResourceName"但我不知道如何从这两个属性中提取文本。有人可以告诉我如何自定义此验证属性的错误消息或从ErrorMessageResourceType中提取文本?

public class PasswordChecker : ValidationAttribute, IClientValidatable
{
    private string defaultErrorMessage = "{0} must be greater than {1} characters";
    private string propertyName;
    public string ErrorMessage { get; set; }

    public string ErrorMessageResourceName { get; set; }

    public Type ErrorMessageResourceType { get; set; }

    public int MinLength { get; set; }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        propertyName = validationContext.MemberName;

        if (value == null || value.ToString().Length < MinLength)
            return new ValidationResult(ErrorMessage == null ? string.Format(defaultErrorMessage, propertyName, MinLength) : ErrorMessage);

        return ValidationResult.Success;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        ModelClientValidationRule rule = new ModelClientValidationRule();
        rule.ErrorMessage = ErrorMessage == null ? string.Format(defaultErrorMessage, propertyName, MinLength) : ErrorMessage;
        rule.ValidationType = "passwordchecker";
        rule.ValidationParameters.Add("minlength", MinLength);

        return new[] { rule };
    }
}

0 个答案:

没有答案