AbstractValidator:显示带有属性值的错误消息

时间:2016-06-10 20:47:45

标签: fluentvalidation

我在导入时使用以下模式" unknown"数据

public class MyCustomObject
{
    public string MyCustomDateAsString { get; set; }

    public DateTime? MyCustomDate
    {
        get
        {
            DateTime? returnValue = null;
            DateTime parseResult = DateTime.MinValue;
            bool parseAttempt = DateTime.TryParse(this.MyCustomDateAsString, out parseResult);
            if (parseAttempt)
            {
                returnValue = parseResult;
            }
            return returnValue;
        }
    }

    public string MyCustomIntAsString { get; set; }


    public int? MyCustomInt
    {
        get
        {
            int? returnValue = null;
            int parseResult = 0;
            bool parseAttempt = int.TryParse(this.MyCustomIntAsString, out parseResult);
            if (parseAttempt)
            {
                returnValue = parseResult;
            }
            return returnValue;
        }
    }   

}

我有这个工作。

public class MyCustomObjectValidator : AbstractValidator<MyCustomObject>
{
    public MyCustomObjectValidator()
    {
        RuleFor(custobj => custobj.MyCustomDateAsString).NotEmpty().WithMessage("Please specify a MyCustomDateAsString");
        RuleFor(custobj => custobj.MyCustomIntAsString).NotEmpty().WithMessage("Please specify a MyCustomIntAsString");

    }
}

我想添加这些规则。

        RuleFor(custobj => custobj.MyCustomDate).NotNull().WithMessage("MyCustomDate must be a valid non null date.  You specified '{0}'"); /* How can I put MyCustomDateAsString for the {0} */
        RuleFor(custobj => custobj.MyCustomInt).NotNull().WithMessage("MyCustomInt must be a valid non null int.  You specified '{0}'"); /* How can I put MyCustomIntAsString for the {0} */

但我不知道如何让MyCustomDateAsString和MyCustomIntAsString显示在MyCustomDate和MyCustomInt的错误消息中。

1 个答案:

答案 0 :(得分:1)

因此,对于大多数验证器,您使用{PropertyValue}占位符来获取当前属性值,但在这种情况下这不会有所帮助,因为您需要不同属性的值。

然而,WithMessage的重载会带来一个可用于构建自定义占位符值的函数。

RuleFor(x=>x.Foo).NotNull().WithMessage("...blah {0}", x=>x.SomeOtherProperty);

最后一个参数实际上是一个Func [T,object]的params数组,因此您可以根据需要指定其中的多个,并按顺序处理它们。