Assists in the construction of validation messages.
        public void AddEqualToDataAttr(IEnumerable<PropertyValidatorResult> propertyValidators, HtmlTag htmlTag, RequestData request)
        {
            var result = propertyValidators.FirstOrDefault(x => x.PropertyValidator is EqualValidator);
            if (result != null)
            {
                var equal = result.PropertyValidator.As<EqualValidator>();
                MessageFormatter formatter = new MessageFormatter()
                    .AppendPropertyName(result.DisplayName)
                    .AppendArgument("ComparisonValue", equal.ValueToCompare);

                string message = formatter.BuildMessage(equal.ErrorMessageSource.GetString());

                if (_msUnobtrusive)
                {
                    htmlTag.Data("val", true);
                    htmlTag.Data("val-equalto", message);
                    if (request.Accessor.PropertyNames.Length > 1)
                        htmlTag.Data("val-equalto-other", request.Id.Replace("_" + request.Accessor.Name, "") + "_" + equal.MemberToCompare.Name);
                    else
                        htmlTag.Data("val-equalto-other", "*." + equal.MemberToCompare.Name);
                }
                else
                {
                    htmlTag.Data("msg-equalto", message);
                    if (request.Accessor.PropertyNames.Length > 1)
                        htmlTag.Data("rule-equalto", "#" + request.Id.Replace("_" + request.Accessor.Name, "") + "_" + equal.MemberToCompare.Name);
                    else
                        htmlTag.Data("rule-equalto", "#" + equal.MemberToCompare.Name);
                }
            }
        }
        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            if (!ShouldGenerateClientSideRules())
                yield break;

            var formatter = new MessageFormatter().AppendPropertyName(Rule.PropertyName);
            string message = formatter.BuildMessage(RemoteValidator.ErrorMessageSource.GetString());

            yield return new ModelClientValidationRemoteRule(message, RemoteValidator.Url, RemoteValidator.HttpMethod, RemoteValidator.AdditionalFields);
        }
        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            if (!ShouldGenerateClientSideRules()) yield break;

            var formatter = new MessageFormatter().AppendPropertyName(Rule.PropertyName);
            string message = formatter.BuildMessage(Validator.ErrorMessageSource.GetString());
            var rule = new ModelClientValidationRule
            {
                ValidationType = "notequal",
                ErrorMessage = message
            };
            rule.ValidationParameters["field"] = String.Format("#{0}", ((NotEqualValidator)Validator).MemberToCompare.Name);
            yield return rule;
        }
        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            if (!ShouldGenerateClientSideRules()) yield break;

            var formatter = new MessageFormatter().AppendPropertyName(Rule.GetDisplayName());
            string message = formatter.BuildMessage(Validator.ErrorMessageSource.GetString());
            var clientRule = new ModelClientValidationRule
            {
                ValidationType = "greaterthanorequal",
                ErrorMessage = message,
            };
            clientRule.ValidationParameters.Add("valuetocompare", ((GreaterThanOrEqualValidator)Validator).ValueToCompare);

            yield return clientRule;
        }
        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            if (!this.ShouldGenerateClientSideRules()) yield break;

            var validator = Validator as LessThanOrEqualValidator;

            var errorMessage = new MessageFormatter().AppendPropertyName(Rule.GetDisplayName())
                .BuildMessage(validator.ErrorMessageSource.GetString());
            var rule = new ModelClientValidationRule
            {
                ErrorMessage = errorMessage,
                ValidationType = "lessthanorequaldate"
            };
            rule.ValidationParameters["other"] = CompareAttribute.FormatPropertyForClientValidation(validator.MemberToCompare.Name);
            yield return rule;
        }
        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            if (!this.ShouldGenerateClientSideRules())
                yield break;

            var formatter = new MessageFormatter().AppendPropertyName(Rule.PropertyName);
            string message = formatter.BuildMessage(Validator.ErrorMessageSource.GetString());

            var rule = new ModelClientValidationRule
            {
                ValidationType = "remote",
                ErrorMessage = message
            };
            rule.ValidationParameters.Add("url", "/api/validation/uniqueemail");

            yield return rule;
        }
        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            if (!this.ShouldGenerateClientSideRules())
            {
                yield break;
            }

            var validator = Validator as IsUniquePropertyValidator;

            var errorMessage = new MessageFormatter()
                .AppendPropertyName(Rule.GetDisplayName())
                //.AppendArgument("ValueToCompare", validator.ValueToCompare)
                .BuildMessage(validator.ErrorMessageSource.GetString());

            //This is the rule that asp.net mvc 3, uses for Remote attribute.
            yield return new ModelClientValidationRemoteRule(errorMessage, validator.Url, validator.HttpMethod, validator.AdditionalFields);
        }
        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            if (!ShouldGenerateClientSideRules()) yield break;

            var validator = Validator as NotMatchesPropertyValidator;

            var formatter = new MessageFormatter().AppendPropertyName(Rule.GetDisplayName());
            string errorMessage = formatter.BuildMessage(validator.ErrorMessageSource.GetString());

            var rule = new ModelClientValidationRule
            {
                ErrorMessage = errorMessage,
                ValidationType = "nomatchregex"
            };
            rule.ValidationParameters.Add("nomatchpattern", validator.Expression);
            yield return rule;
        }
        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            if (!this.ShouldGenerateClientSideRules())
            {
                yield break;
            }

            var validator = Validator as IsCheckedPropertyValidator;

            var errorMessage = new MessageFormatter()
                .AppendPropertyName(Rule.GetDisplayName())
                //.AppendArgument("ValueToCompare", validator.ValueToCompare)
                .BuildMessage(validator.ErrorMessageSource.GetString());

            var rule = new ModelClientValidationRule
            {
                ErrorMessage   = errorMessage,
                ValidationType = "equalischecked"
            };

            rule.ValidationParameters["other"] = true;
            yield return rule;
        }
 public static string GetMessage(RequestData requestData, PropertyValidatorResult propertyValidator)
 {
     MessageFormatter formatter = new MessageFormatter().AppendPropertyName(propertyValidator.DisplayName);
     string message = formatter.BuildMessage(propertyValidator.PropertyValidator.ErrorMessageSource.GetString());
     return message;
 }
 /// <summary>
 /// Get a error message for a property
 /// </summary>
 /// <param name="propertyValidator">PropertyValidator to get for</param>
 /// <param name="propertyName">Name of propery</param>
 /// <returns>Formatted string</returns>
 public static string GetErrorMessageFor(this IPropertyValidator propertyValidator, string propertyName)
 {
     var formatter = new MessageFormatter().AppendPropertyName(propertyName);
     var errorMessage = formatter.BuildMessage(propertyValidator.ErrorMessageSource.GetString());
     return errorMessage;
 }