2016-06-10 116 views
0

导入“未知”数据时使用以下模式。AbstractValidator:显示带属性值的错误消息

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

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

但是,有一个WithMessage的重载需要一个func,您可以使用它来构建自定义的placehold值。

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

最后一个参数实际上是Func键[T,对象]的参数数组,以便你喜欢你可以指定多达的这些,并且他们在顺序处理。