Ошибки проверки уровня свойства препятствуют проверке проверки уровня Класса

Обновление после Щедрости было награждено

Новое решение подходит к этой проблеме. См. предварительный просмотр ASP.NET MVC 3 1 здесь: http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx

Посмотрите в разделе Model Validation Improvements, где Вы будете видеть решение моей проблемы.


Исходное сообщение

Что касается моего более раннего сообщения, Как проверить два свойства с ASP.NET MVC 2, где я спросил, как я мог сравнить два свойства для Проверки допустимости модели.

Я действительно находил ответ полезным, но меня оставили с совершенно другой проблемой:

Проблема: Если уровень Свойства, ValidationAttribute содержит ошибку, то уровень Класса ValidationAttributes НЕ проверен.

Рассмотрите следующее:

[EqualTo("Email", "EmailConfirm", ErrorMessage = "E-mailadresserne skal være ens")]
[EqualTo("Password", "PasswordConfirm", ErrorMessage = "Adgangskoderne skal være ens")]
[Bind(Exclude="UserId")]
public class EditSiteUser
{
    [Required(ErrorMessage="Du skal bekræfte adgangskode")]
    public string PasswordConfirm { get; set; }

    [Required(ErrorMessage="Du skal bekræfte e-mailadressen")]
    [Email(ErrorMessage="Ugyldig e-mailadresse")]
    public string EmailConfirm { get; set; }
    public int UserId { get; set; }

    [Required(ErrorMessage = "Du skal indtaste et brugernavn")]
    public string Username { get; set; }

    [Required(ErrorMessage = "Du skal indtaste en adgangskode")]
    public string Password { get; set; }

    [Required(ErrorMessage = "Du skal indtaste en e-mailadresse")]
    [Email(ErrorMessage = "Ugyldig e-mailadresse")]
    public string Email { get; set; }
}

Здесь у меня есть два уровня Класса attibutes, которые проверяют EmailConfirm и PasswordConfirm.

Если поле как Имя пользователя пусто, и таким образом приводит к ошибке, то два Атрибута EqualTo никогда не проверяются.

У кого-либо есть предложение для преодоления этой проблемы?

Править: При необходимости еще в информации об этой проблеме спросите в комментариях, и я буду очень рад дать Вам любую дополнительную информацию, в которой Вы нуждаетесь.

Вопросы:

Q: "Почему важно, чтобы проверки уровня класса были проверены, если проверка уровня свойства перестала работать?".

A: "Поскольку это - часть формы, где пользователь вводит информацию в форму, которая отправляет назад через Ajax. Когда возвраты формы это должно показать все текущие проблемы".

Q: "Каков точно атрибут EqualTo, который Вы поместили в класс? Действительно ли это - пользовательский атрибут проверки? Если так, как это работает? что это делает?"

A: EqualTo является уровнем класса ValidationAttribute, который сравнивает значение двух Свойств экземпляра класса. Ищите "PropertiesMustMatchAttribute" для подобной реализации.

6
задан Community 23 May 2017 в 12:01
поделиться

2 ответа

Это не поддерживается. Если какая-либо из проверок на уровне свойств завершилась неудачно, проверки на уровне класса не выполняются. Я предлагаю вам взглянуть на MVC Foolproof Validation . Он расширяет проверку MVC, добавляя поддержку проверки условных свойств. Я думаю, что это решило бы проблему в данном конкретном случае.

На сайте проекта указано, что он не работает с MVC2 RC, поэтому вам придется загрузить исходный код и запустить его / принять их идеи самостоятельно.

6
ответ дан 17 December 2019 в 00:03
поделиться

Из вашего примера, что вы хотите иметь поля «Подтвердить ввод другого поля ввода», правильной реализацией будет

 [EqualTo("Email", ErrorMessage = "E-mailadresserne skal være ens")]
 public string EmailConfirm { get; set; }

, поскольку «ошибка» - это проверка поля Подтвердить. или другими словами, вы хотите, чтобы рядом с полем подтверждения отображалось сообщение об ошибке, в котором говорится, что оно не такое же, как в поле «Электронная почта».

это вернет конфигурацию проверки в свойство и решит вашу проблему.

0
ответ дан 17 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: