Обновление после присуждения награды
Новое решение подходит к этой проблеме. Пожалуйста, обратитесь к ASP.NET MVC 3 Preview 1 здесь: http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx
Посмотрите в разделе Улучшения проверки моделей , где вы найдете решение моей проблемы.
Исходное сообщение
Ссылаясь на мой предыдущий пост Как проверить два свойства с ASP.NET MVC 2 , где я спросил, как я могу сравнить два свойства для проверки модели.
Я нашел ответ полезным, но у меня осталась совершенно другая проблема:
Проблема : Если атрибут ValidationAttribute уровня свойства содержит ошибку, то атрибуты ValidationAttribute уровня класса НЕ проверяются.
Пожалуйста, примите во внимание следующее:
[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; }
}
Здесь у меня есть две аттрибуты уровня класса, которые проверяют EmailConfirm и PasswordConfirm.
Если поле, такое как Имя пользователя, пусто и, следовательно, выдает ошибку, тогда два Атрибута EqualTo никогда не проверяются.
У кого-нибудь есть предложения по преодолению этой проблемы?
РЕДАКТИРОВАТЬ: Если вам нужна дополнительная информация об этой проблеме, пожалуйста, спросите в комментариях, и я буду очень рад предоставить вам любую дополнительную информацию, вам нужно.
Вопросы:
В: «Почему важно, чтобы проверки на уровне класса были проверены, если проверка на уровне свойств не удалась?».
A: «Потому что это часть формы, где пользователь вводит информацию в форму, которая отправляет обратно через AJAX. Когда форма возвращается, она должна показывать все текущие проблемы».
В: «Что именно является атрибутом EqualTo, который вы поместили в класс? Это пользовательский атрибут проверки? Если да, то как он работает? Что он делает?»
A: EqualTo является атрибутом ValidationAttribute уровня класса, который сравнивает значение двух свойств экземпляра класса. Найдите «PropertiesMustMatchAttribute» для аналогичной реализации.