Ошибки проверки MVC Razor, отображаемые при загрузке страницы, когда данные не были опубликованы

Я возился с аннотациями данных. Когда я нажимаю ссылку, чтобы перейти на страницу, отображаются сообщения проверки, но я хотел бы, чтобы сообщения проверки не отображались, если данные не были опубликованы.

Вид:

@Html.TextBoxFor(m => m.EmailAddress, new { @placeholder = "Enter Email", @class = "form-control" })
@Html.ValidationSummary(true, "Registration Failed. Check your credentials")
@Html.ValidationMessageFor(m => m.EmailAddress, "You must enter a valid Email Address.")

Модель:

[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
[Display(Name = "Email Address: ")]
public string EmailAddress { get; set; }

Контроллер:

[HttpGet]
        public ActionResult AddUser()
        {
            return View();
        }

        [HttpPost]
        public ActionResult AddUser(UserCreateViewModel user)
        {
            if (ModelState.IsValid)
            {
                var success = UserRepository.AddUser(user);

                if (success)
                {
                    return View("Success");
                }
            }

            return View("AddUser");
        }

Как я уже сказал, моя проблема возникает при загрузке страницы представления AddUser. Когда я нажимаю на ссылку, чтобы просмотреть страницу AddUser, сообщения проверки отображаются после ее загрузки, но на данный момент данные не были опубликованы, а модель пуста.


person allencoded    schedule 22.01.2014    source источник


Ответы (3)


Установите стиль проверки:

.validation-summary-valid { display:none; }

Так что по умолчанию он скрыт. Ошибка вызовет его отображение.

person mnsr    schedule 23.01.2014
comment
Я использовал пользовательский файл CSS и перестал включать старый Site.css, включив его (в котором было ваше указанное выше исправление), исправив мою проблему. - person allencoded; 23.01.2014
comment
С какой стати нам нужно делать это вручную. Почему это не обрабатывается самой структурой. :-| - person Unbreakable; 03.08.2017
comment
Скорее всего, это связано с тем, что файл Site.css по умолчанию был изменен или отсутствует. - person recursive_acronym; 09.05.2019

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

ModelState.Clear();

Это происходит потому, что ModelBinder установит ModelState при привязке. В каждом действии, которое связывает модель и возвращает представление с той же моделью, у вас будет эта проблема.

[HttpPost]
public ActionResult AddUser(UserCreateViewModel user)
{
    if (ModelState.IsValid)
    {
        var success = UserRepository.AddUser(user);

        if (success)
        {
            return View("Success");
        }
    }

    ModelState.Clear(); // <-------
    return View("AddUser");
}
person Renan Araújo    schedule 18.03.2016
comment
Это очень полезно для меня. Я добавил ModelState.Clear(), он скрыт!! - person TaiwanHotDog; 01.07.2020
comment
Хороший друг (у) - person sami ullah; 27.02.2021

.field-validation-valid {
  display: none;
}

Всякий раз, когда проверка срабатывает при загрузке страницы, это значение «.field-validation-valid» автоматически добавляется к атрибуту класса сработавшего элемента ввода.

Добавив CSS для отображения none в качестве значения этого конкретного класса, вы больше не будете видеть сообщения проверки при начальной загрузке страницы.

Сообщения проверки будут по-прежнему отображаться нормально после касания определенного элемента ввода.

person Jimmy Shaw    schedule 16.11.2017
comment
Хотите объяснить, как это отвечает на вопрос ОП? - person ; 17.11.2017
comment
Это не помогает ОП, но мне помогло. Очень признателен! - person Ed Gibbs; 17.04.2019