Как я могу вернуться к форме после проверки на стороне сервера с сохранением данных формы? - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть это правило проверки для сравнения двух дат:

public class EmployeeAbsenceValidator : AbstractValidator<EmployeeAbsence>
{
    public EmployeeAbsenceValidator() {
        RuleFor(a => a.DateTo)
            .GreaterThanOrEqualTo(a => a.DateFrom);
    }
}

Это код контроллера для проверки вновь созданного периода отсутствия:

if (ModelState.IsValid)
{
    EmployeeAbsenceValidator validator = new EmployeeAbsenceValidator();
    ValidationResult result = validator.Validate(employeeAbsence);
    if (!result.IsValid)
    {
        return RedirectToAction("Create", "EmployeeAbsences");
    }
    else
    {
        _context.Add(employeeAbsence);
        await _context.SaveChangesAsync();
        return RedirectToAction("Details", "Employees");
    }
}

Если даты недействительны, я хочу вернуться к форме со всеми данными формы без изменений. Как мне это сделать?

1 Ответ

0 голосов
/ 12 ноября 2018

Предполагая, что имя действия одинаково для ваших GET и POST методов действия, затем используйте return this.View( model ), например так:

if (ModelState.IsValid)
{
    EmployeeAbsenceValidator validator = new EmployeeAbsenceValidator();
    ValidationResult result = validator.Validate(employeeAbsence);
    if (!result.IsValid)
    {
        return this.View( employeeAbsence );
    }
    else
    {
        _context.Add(employeeAbsence);
        await _context.SaveChangesAsync();
        return RedirectToAction("Details", "Employees");
    }
}

Это вернет HTML-код страницы к запросу POST с этими сообщениями об ошибках валидации внутри любых @Html.ValidationMessageFor( m => m.Foo помощников (или <span asp-validator-for="Foo"> помощников).

...