Правило FluentValidation NotEqual на стороне клиента - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь добавить правило NotEqual на стороне клиента в мой проект MVC 5, найденный здесь .

Кажется, все работает, за исключением того, что я не могу добраться досообщение об ошибке, которое передается в правило.Я вижу это в приватном поле в отладчике, я просто не уверен, как добраться до него в методе GetClientValidationRules.Проблема находится на линии, где создается сообщение об ошибке, validator.ErrorMessageSource.GetString() больше не существует.

public class NotEqualClientRule : FluentValidationPropertyValidator 
{
  public static ModelValidator Create(ModelMetadata meta, ControllerContext context, PropertyRule propertyDescription, IPropertyValidator validator) 
  {
    return new NotEqualClientRule(meta, context, propertyDescription, validator);
  }

  public NotEqualClientRule(ModelMetadata metadata, ControllerContext controllerContext, PropertyRule propertyDescription, IPropertyValidator validator) : base(metadata, controllerContext, propertyDescription, validator) 
  {
    ShouldValidate = false; //This is necessary - don't want to kick in during model binding.
  }

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

    var validator = Validator as NotEqualValidator;

    var errorMessage = new MessageFormatter()
        .BuildMessage(validator.ErrorMessageSource.GetString());

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

    if (validator.MemberToCompare != null) 
    {
        rule.ValidationParameters["field"] = String.Format("#{0}", validator.MemberToCompare.Name);
    } 
    else 
    {
        rule.ValidationParameters["field"] = validator.ValueToCompare;
    }

    yield return rule;
  }
}

1 Ответ

0 голосов
/ 25 июня 2019

Изменение

var errorMessage = new MessageFormatter().BuildMessage(validator.ErrorMessageSource.GetString());

до

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

получил сообщение об ошибке, которое я установил в правиле валидации.

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