dataannotations - Regla de FluentValidation para mĂșltiples propiedades
fluentvalidation mvc (2)
Tengo un FluentValidator que tiene múltiples propiedades como zip y county, etc. Quiero crear una regla que tome dos propiedades como una construcción RuleFor
public class FooArgs
{
public string Zip { get; set; }
public System.Guid CountyId { get; set; }
}
public class FooValidator : AbstractValidator<FooArgs>
{
RuleFor(m => m.CountyId).Must(ValidZipCounty).WithMessage("wrong Zip County");
}
Esto funciona, pero quiero pasar el código postal y el condado a la rue para validar. ¿Cuál es el mejor método para lograr esto?
Acabo de encontrar esta vieja pregunta y creo que tengo una respuesta más simple. Puede pasar fácilmente todo su objeto a su regla de validación personalizada simplificando el parámetro a RuleFor
por ejemplo
RuleFor(m => m).Must(fooArgs =>
ValidZipCounty(fooArgs.Zip, fooArgs.countyId))
.WithMessage("wrong Zip County");
Si el método ValidZipCountry
es local a su validador y puede cambiar su firma para tomar un FooArgs
entonces el código se simplifica hasta
RuleFor(m => m).Must(ValidZipCounty).WithMessage("wrong Zip County");
El único inconveniente es que el PropertyName
en el error de validación resultante será una cadena vacía. Esto puede causar un problema para su código de visualización de validación. Sin embargo, no está realmente claro a qué propiedad pertenece el error, ContryId
o Zip
, así que esto tiene sentido.
Hay una sobrecarga FooArgs
que también le proporciona el objeto FooArgs
documentado here . Te permite pasar fácilmente ambos argumentos a tu método de esta manera:
RuleFor(m => m.CountyId).Must((fooArgs, countyId) =>
ValidZipCounty(fooArgs.Zip, countyId))
.WithMessage("wrong Zip County");