Как отобразить только одну ошибку проверки в форме? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть несколько полей ввода в регистрационной форме. Например, есть 5 полей. Неправильные поля «Email» и «Phone Number», я не хочу отображать обе ошибки проверки. Я только хочу проверить поле «Электронная почта» и отобразить ошибку электронной почты, если она будет правильно записана во второй попытке, только тогда может появиться сообщение об ошибке «Пароль».

Можно ли выполнить это только с проверкой на стороне сервера?

Снимок экрана: Обе ошибки проверки отображаются одновременно. enter image description here

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Вы можете динамически изменить ModelState и проверить ошибки:

if (ModelState.IsValid)
{

   ....
}
else
{
    var flag = false;
    foreach (var modelState in ViewData.ModelState.Values)
    {
        if (flag)
        {
            modelState.Errors.Clear();
        }
        if (modelState.Errors.Count >0)
        {
            flag = true;
        }

        if (modelState.Errors.Count>1)
        {
            var firstError = modelState.Errors.First();
            modelState.Errors.Clear();
            modelState.Errors.Add(firstError);
        }

    }
}
return View("index", movie);
0 голосов
/ 01 октября 2019

Установите максимальные ошибки проверки модели на 1 в stratup, процесс проверки останавливается при достижении максимального числа (по умолчанию 200):

services.AddMvc(options => 
{
    options.MaxModelValidationErrors = 1;
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

, но в этом случае он остановится при первой ошибке, даже еслив одном и том же свойстве имеется более одной ошибки проверки (например, длина пароля недействительна, пароль должен содержать заглавную букву и т. д.).

Если вам необходимо показать все ошибки сразу для каждого свойствавам понадобится другое решение.

ref: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-2.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...