У меня есть это свободное правило проверки:
public EmployeeAbsenceValidator() {
RuleFor(a => a.DateTo)
.GreaterThanOrEqualTo(a => a.DateFrom)
.WithMessage("The end date cannot be before the start date.");
}
В методе Create POST в контроллере я проверяю даты и сохраняю в базу данных и перенаправляю в представление сведений для сотрудника, еслидаты действительны или возвращаются к представлению создания отсутствия, если они не являются:
if (ModelState.IsValid)
{
EmployeeAbsenceValidator validator = new EmployeeAbsenceValidator();
ValidationResult result = validator.Validate(employeeAbsence);
if (result.IsValid)
{
_context.Add(employeeAbsence);
await _context.SaveChangesAsync();
return RedirectToAction("Details", "Employees");
}
else
{
result.AddToModelState(ModelState, null); // Passing error message to model state
return View(employeeAbsence);
}
}
Это представление создания отсутствия:
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="row">
<div class="form-group col-md-4">
<label asp-for="Percentage" class="control-label"></label>
<input asp-for="Percentage" class="form-control" />
<span asp-validation-for="Percentage" class="text-danger"></span>
</div>
</div>
<div class="row">
<div class="form-group col-md-6">
<label asp-for="DateFrom" class="control-label"></label>
<input asp-for="DateFrom" class="form-control" />
<span asp-validation-for="DateFrom" class="text-danger"></span>
</div>
<div class="form-group col-md-6">
<label asp-for="DateTo" class="control-label"></label>
<input asp-for="DateTo" class="form-control" />
<span asp-validation-for="DateTo" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<button type="submit" value="Save">Save</button>
</div>
</form>
Если Percentage
заполнено правильно, и DateTo
предшествует DateFrom
, сообщение об ошибке из-за полной проверки отображается на дату.Но если Percentage
недопустим, отображается только сообщение об ошибке на стороне клиента на Percentage
.Я предполагаю, что это потому, что сервер не знает о недействительности дат, поскольку форма еще не была отправлена.Как я могу получить оба сообщения об ошибках?(Пожалуйста, скажите мне, что мне не нужно писать JQuery ...)