How to conditionally require a related object property in ASP.NET Core 6?

39 views Asked by At

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.

0

There are 0 answers