Не работает валидация asp.net core MVC

Столкнулся с такой проблемой, что не работает валидация на стороне сервера. Пробовал атрибуты и свойства в ModelBuilder. Подключал скрипты js - на стороне клиента все работало.

   public class Appeal
    {
        public long Id { get; set; }
        [Required]
        public string FirstName { get; set; }
        [Required]
        public string LastName { get; set; }

        public string MiddleName { get; set; }
        [Required]
        public string PhoneNumber { get; set; }

        public string Text { get; set; }

        public DateTime CreatedDate { get; set; }

        public AppealStatus Status { get; set; }

        public string AuthorId { get; set; }

        public virtual User Author { get; set; }

    }

Это контекст

     protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<Appeal>(x =>
        {
            x.ToTable("Appeal");
            x.HasKey(p => p.Id);
            x.Property(p => p.Id).HasColumnName("appeal_id")
                .ValueGeneratedOnAdd();
            x.Property(p => p.FirstName).HasColumnName("first_name")
                                        .IsRequired();
            x.Property(p => p.LastName).HasColumnName("last_name")
                                        .IsRequired();
            x.Property(p => p.MiddleName).HasColumnName("middle_name");
            x.Property(p => p.PhoneNumber).HasColumnName("phone_number")
                                        .IsRequired();
            x.Property(p => p.Text).HasColumnName("text");
            x.Property(p => p.CreatedDate).HasColumnName("created_date");
            x.Property(p => p.Status).HasColumnName("status");

            x.HasOne(u => u.Author)
                .WithMany(u => u.Appeals)
                .HasForeignKey(u => u.AuthorId);
        });}

View

  @model WebApplication1.Models.Appeal
    @{
        ViewData["Title"] = "AddClient";
    }
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-controller="AppealController" asp-action="AddClient">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>

            <div class="form-group">
                <label class="control-label">Фамилия</label>
                <input asp-for="LastName" class="form-control" />
                <span asp-validation-for="LastName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label class="control-label">Имя</label>
                <input asp-for="FirstName" class="form-control" />
                <span asp-validation-for="FirstName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label class="control-label">Отчество</label>
                <input asp-for="MiddleName" class="form-control" />
                <span asp-validation-for="MiddleName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label class="control-label">Номер телефона</label>
                <input asp-for="PhoneNumber" class="form-control" />
                <span asp-validation-for="PhoneNumber" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label class="control-label">Текст обращения</label>
                <input asp-for="Text" class="form-control" />
                <span asp-validation-for="Text" class="text-danger"></span>
            </div>
            @if (ViewBag.Success == true)
            {
                <p>
                    <div>
                        <font color="#03D100">Обращение создано</font>
                    </div>
                </p>
            }

            <div class="form-group">
                <input type="submit" value="Создать" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div> 
    

Контроллер

   [HttpPost]
    public IActionResult AddAppeal(Appeal appeal)
    {
        if (appeal != null)
        {
            appeal.AuthorId = User.Identity.GetUserId();
            appeal.Status = AppealStatus.Registered;
            appeal.CreatedDate = DateTime.Now;
            _clientContext.Clients.Add(appeal);
        }

         if (!ModelState.IsValid)
        {
            return View(appeal);
        }
        else
        {
           _clientContext.SaveChanges();
           ModelState.Clear();
           ViewBag.Success = true;
           return View();
        }
    }

    [HttpGet]
    public IActionResult AddAppeal()
    {
        return View();
    }

Ответы (1 шт):

Автор решения: Aziz Umarov

По сути валидация автоматически не делается на сервере. Нужно явно проверять валидацию

if (!ModelState.IsValid)
{
   return Page();
}

Это связано с тем что Вы должны с начала создать объект, потом заполнить и только потом проверить на валидность.

Movie.ReleaseDate = modifiedReleaseDate;

if (!TryValidateModel(Movie, nameof(Movie)))
{
    return Page();
}
→ Ссылка