Обновление после Щедрости было награждено
Новое решение подходит к этой проблеме. См. предварительный просмотр 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" для подобной реализации.
Это не поддерживается. Если какая-либо из проверок на уровне свойств завершилась неудачно, проверки на уровне класса не выполняются. Я предлагаю вам взглянуть на MVC Foolproof Validation . Он расширяет проверку MVC, добавляя поддержку проверки условных свойств. Я думаю, что это решило бы проблему в данном конкретном случае.
На сайте проекта указано, что он не работает с MVC2 RC, поэтому вам придется загрузить исходный код и запустить его / принять их идеи самостоятельно.
Из вашего примера, что вы хотите иметь поля «Подтвердить ввод другого поля ввода», правильной реализацией будет
[EqualTo("Email", ErrorMessage = "E-mailadresserne skal være ens")]
public string EmailConfirm { get; set; }
, поскольку «ошибка» - это проверка поля Подтвердить. или другими словами, вы хотите, чтобы рядом с полем подтверждения отображалось сообщение об ошибке, в котором говорится, что оно не такое же, как в поле «Электронная почта».
это вернет конфигурацию проверки в свойство и решит вашу проблему.