Почему не работает валидация на стороне сервера после настройки валидации на стороне клиента?
Приложение ASP .NET Core MVC. Есть форма для ввода данных. Код формы:
HTML-Код формы
@model VartanMVCv2.Domain.Entities.Client; <div class="pop_up" id="pop_up"> <div class="pop_up_container"> <div class="pop_up_body"> <div class="grid_form_container"> <div class="grid_item"> <p id="p_textForm">Оставьте заявку и мы Вам перезвоним.</p> <form action="Index" method="post" > <p2 class="validation_text"> <input class="text_input_form" type="text" name="Name" value="" placeholder="Имя" asp-for="Name" data-val-required="Это поле не долно быть пустым" /> <span asp-validation-for="Name"/> </p2> <p2 class ="validation_text"> <input class="text_input_form" type="text" name="Phone" value="" placeholder="Телефон" asp-for="Phone" data-val-required="Это поле не долно быть пустым" /> <span asp-validation-for="Phone" /> </p2> <p2 class="validation_text"> <input class="text_input_form" type="text" name="Email" value="" placeholder="Email" asp-for="Email" data-val-email="Некорректный Email адрес" /> <span asp-validation-for="Email" /> </p2> <div class="time_selection"> <label for="time" class="lab_chk_time">Позвонить с: </label> <input type="time" id="time" name="time" /> </div> <button name="acceptBtn" id="accept" type="submit" value="Send">Создать заявку</button> </form> <div class="pop_up_close" id="pop_up_close">&#10006</div> </div> <div class="grid_item_1" > <div class="image_person"><img src="~/images/form_person.png"></div> </div> </div> </div> </div> </div> |
@model VartanMVCv2.Domain.Entities.Client; <div class="pop_up" id="pop_up"> <div class="pop_up_container"> <div class="pop_up_body"> <div class="grid_form_container"> <div class="grid_item"> <p id="p_textForm">Оставьте заявку и мы Вам перезвоним.</p> <form action="Index" method="post" > <p2 class="validation_text"> <input class="text_input_form" type="text" name="Name" value="" placeholder="Имя" asp-for="Name" data-val-required="Это поле не долно быть пустым" /> <span asp-validation-for="Name"/> </p2> <p2 class ="validation_text"> <input class="text_input_form" type="text" name="Phone" value="" placeholder="Телефон" asp-for="Phone" data-val-required="Это поле не долно быть пустым" /> <span asp-validation-for="Phone" /> </p2> <p2 class="validation_text"> <input class="text_input_form" type="text" name="Email" value="" placeholder="Email" asp-for="Email" data-val-email="Некорректный Email адрес" /> <span asp-validation-for="Email" /> </p2> <div class="time_selection"> <label for="time" class="lab_chk_time">Позвонить с: </label> <input type="time" id="time" name="time" /> </div> <button name="acceptBtn" id="accept" type="submit" value="Send">Создать заявку</button> </form> <div class="pop_up_close" id="pop_up_close">&#10006</div> </div> <div class="grid_item_1" > <div class="image_person"><img src="~/images/form_person.png"></div> </div> </div> </div> </div> </div>
Три поля для ввода данных с настроенной валидацией на стороне клиента и сервера. Только по нажатию кнопки acceptBtn вместо перехода к post - методу всплывает окно:
Что я делаю не так? Как по нажатию кнопки вызвать post - метод index? Подскажите. будьте добры.
Код контроллера
public class HomeController : Controller { [HttpGet] public IActionResult Index() { return View(); } [HttpPost] public IActionResult Index(Client client) { if (ModelState.IsValid) { return View("Confirm"); } return View(); } |
public class HomeController : Controller { [HttpGet] public IActionResult Index() { return View(); } [HttpPost] public IActionResult Index(Client client) { if (ModelState.IsValid) { return View("Confirm"); } return View(); }
Модель
public class Client { [Required] public Guid Id { get; set; } [Required] public string Name { get; set; } [EmailAddress] public string Email { get; set; } [Required] [Phone] public string Phone { get; set; } public DateTime? CallTime { get; set; } public Client() { } private Guid GetId() { Guid id = Guid.NewGuid(); return id; } |
public class Client { [Required] public Guid Id { get; set; } [Required] public string Name { get; set; } [EmailAddress] public string Email { get; set; } [Required] [Phone] public string Phone { get; set; } public DateTime? CallTime { get; set; } public Client() { } private Guid GetId() { Guid id = Guid.NewGuid(); return id; }
Дополнительно:
Разобрался в проблеме! Выкладываю вдруг кому пригодиться. Библиотеки валидации нужно подключать в самом начале, сразу после jqwery.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Проблема возникла, скорее всего, из-за неправильной синхронизации между валидацией на стороне клиента и на стороне сервера.
Настройка валидации на стороне на JavaScript обычно используется для удобства пользователей, чтобы они могли видеть ошибки немедленно, без необходимости отправлять форму на сервер. Однако, необходимо помнить, что валидация на клиентской стороне может быть обойдена злоумышленником, поэтому валидация на сервере обязательна для безопасности данных.
Проверьте, что ваши правила валидации на сервере соответствуют тем, что используются на клиентской стороне. Возможно, вы пропустили какие-то особенности или случаи, которые не были учтены при написании кода.
Также удостоверьтесь, что вы отправляете данные на сервер после их валидации на клиентской стороне. Если данные не отправляются, то сервер не будет знать о результатах валидации и не сможет выполнить свою часть задачи.
И еще один важный момент - убедитесь, что вы используете одинаковые методы валидации на обеих сторонах. Например, если на клиентской стороне вы используете JavaScript для валидации email, то на сервере также следует использовать проверку на корректный формат email.
В целом, для решения данной проблемы необходимо тщательно проверить соответствие правил валидации на обеих сторонах, убедиться в правильной передаче данных на сервер после валидации на клиентской стороне и использовать одинаковые методы валидации на обеих сторонах.