AbstractValidator:显示具有 属性 值的错误消息
AbstractValidator : showing error messages with property values
我在导入 "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 的错误消息中。
因此,对于大多数验证器,您会使用 {PropertyValue} 占位符来获取当前 属性 值,但这在这种情况下无济于事,因为您需要另一个 属性 的值.
但是,WithMessage 有一个重载,它采用一个函数,您可以使用该函数来构建自定义占位符值。
RuleFor(x=>x.Foo).NotNull().WithMessage("...blah {0}", x=>x.SomeOtherProperty);
最后一个参数实际上是 Func[T,object] 的参数数组,因此您可以根据需要指定任意数量的参数,并按顺序处理它们。
我在导入 "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 的错误消息中。
因此,对于大多数验证器,您会使用 {PropertyValue} 占位符来获取当前 属性 值,但这在这种情况下无济于事,因为您需要另一个 属性 的值.
但是,WithMessage 有一个重载,它采用一个函数,您可以使用该函数来构建自定义占位符值。
RuleFor(x=>x.Foo).NotNull().WithMessage("...blah {0}", x=>x.SomeOtherProperty);
最后一个参数实际上是 Func[T,object] 的参数数组,因此您可以根据需要指定任意数量的参数,并按顺序处理它们。