I have the following classes, they are bit simplified for example.
class LineInfo
{
Id,
LineNumber,
SubAccountNumer,
MobileNumber
}
class SuspendLinesVM{
public List<LineInfo> Lines{ get;set; }
}
I receive SuspendLinesVM in my action and all Lines are created dynamicaly from client. Each element that belongs to concrete LineInfo in form has name with template ‘lineid{Id}_ElementName‘. So they comes to me in form like:
lineid0001_LineNumber
lineid0001_SubAccountNumer
lineid0001_MobileNumber
lineid0021_LineNumber
lineid0021_SubAccountNumer
lineid0021_MobileNumber
When some error occures while validation, I need a way to set the failed property as it came in request to highlight invalid fields in the view.
I left questions where I got confused.
public class LineInfoValidator: AbstractValidator<LineInfo>
{
public LineInfoValidator()
{
RuleFor(m => m.LineNumber)
.NotEmpty().WithMessage("Line # is required").OverridePropertyName( ??? )
.InclusiveBetween(1, 9999).WithMessage("Line # must be in range [1, 9999]").OverridePropertyName( ??? )
...
I need a way to do something like *(instance, propertyName) => return string.format(‘lineid_{0}_{1}’, instance.Id, propertyName)*.
Any ideas ?
Resolved with ‘WithState’ method. Thanks to Jeremy! His solution is here http://fluentvalidation.codeplex.com/discussions/278892