I have related objects VehicleAcquisition and FleetValue. I want to make FleetValue.ConditionId required if VehicleAcquisition.RequestType.Label == "Replacement".
The following solution using FluentValidation works, but it does not perform client-side validation:
ConditionValidator.cs:
public class ConditionValidator : AbstractValidator<FleetValue>
{
public ConditionValidator()
{
RuleFor(fleetValue => fleetValue.ConditionId).NotEmpty();
}
}
Inside Program.cs:
builder.Services.AddScoped<ConditionValidator>();
Inside Controller:
private readonly ConditionValidator _conditionValidator;
public FleetValueController(ConditionValidator conditionValidator) : base()
{
_conditionValidator = conditionValidator;
}
if (vehicleAcquisition.RequestType.Label == "Replacement")
{
var validationResult = _conditionValidator.Validate(vm.FleetValue);
if (!validationResult.IsValid)
{
WarningAlert("Please select the condition.");
return View($"{ViewBase}/Form.cshtml", vm);
}
}
I tried the following, but it did not work:
public class ConditionValidator : AbstractValidator<FleetValue>
{
public ConditionValidator()
{
RuleFor(fleetValue => fleetValue.ConditionId).NotEmpty()
.WithMessage("Please select the condition")
.When(fleetValue => fleetValue.VehicleAcquisition.RequestType.Label == "Replacement");
}
}
builder.Services.AddValidatorsFromAssemblyContaining<ConditionValidator>();
builder.Services.AddFluentValidationAutoValidation();
builder.Services.AddFluentValidationClientsideAdapters();
I did not see any errors.