【问题标题】:FluentValidation NotEqual client side ruleFluentValidation NotEqual 客户端规则
【发布时间】:2019-06-24 18:36:21
【问题描述】:

我正在尝试将 NotEqual 客户端规则添加到我在 here 找到的 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;
  }
}

【问题讨论】:

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


    【解决方案1】:

    变化

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

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

    得到我在验证规则中设置的错误消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多