Im using fluent validation with mvc4
In my Model I have a list:
public List<int> TransDrops { get; set; }
in the view im creating text boxes for each item in the list.
I want to subsequently make sure each field is filled in. (not null/empty)
OrderDetailsViewModelValidator is the validator on the model, what do i need?
Thanks
FluentValidation provides a great alternative to Data Annotations in order to validate models. It gives better control of validation rules and makes validation rules easy to read, easy to test, and enable great separation of concerns.
Fluent validations use Fluent interface and lambda expressions to build validation rules. Fluent validation is a free-to-use . NET validation library that helps you make your validations clean and easy to both create and maintain. It even works on external models that you don't have access to, with ease.
FluentValidation is an open source validation library for . NET. It supports a fluent API, and leverages lambda expressions to build validation rules.
There is a simpler approach now, using RuleForEach
:
RuleForEach(model => model.TransDrops)
.NotNull()
.WithMessage("Please fill all items");
Make sure to use NotNull
and not NotEmpty
, because NotEmpty validates type's default value (in this case: int
, it's 0).
You can check for more details in the documentation
First you have to use nullable integer type for collection item, otherwise empty textboxes would be bound to zero value, what makes impossible to distinguish empty textboxes and filled with zeros.
public List<int?> TransDrops { get; set; }
Next, use predicate validator (Must rule):
RuleFor(model => model.TransDrops)
.Must(collection => collection == null || collection.All(item => item.HasValue))
.WithMessage("Please fill all items");
If you need to prevent empty collection being successfully validated, just add NotEmpty()
rule before predicate validator: it checks that any IEnumerable
not null
, and have at least 1 item.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With