Update after Bounty was awarded
A new solution is coming up to this problem. Please refer to ASP.NET MVC 3 Preview 1 here: http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx
Look in the section Model Validation Improvements, where you will see the solution to my problem.
Original Post
Referring to my earlier post How to validate two properties with ASP.NET MVC 2 where I asked how I could compare two properties for Model validation.
I did find the answer useful, but I was left with an entirely different problem:
Problem: If a Property-level ValidationAttribute contains an error, then the Class-level ValidationAttributes are NOT validated.
Please consider the following:
[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; }
}
Here I have two Class-level attibutes that validate EmailConfirm and PasswordConfirm.
If a field like Username is empty, and thus yields an error, then the two EqualTo Attributes are never validated.
Does anyone have a suggestion to overcome this problem?
EDIT: If you need anymore information about this problem, please ask in comments and I will be very happy to give you any additional information you need.
Questions:
Q: "Why is it important that the class-level checks get validated if a property-level check fails?".
A: "Because this is part of a form, where a user enters information into a form that posts back via AJAX. When the form returns it should show all current problems."
Q: "What exactly is the EqualTo attribute you have placed on the class? Is it a custom validation attribute? If so, how does it work? what does it do?"
A: EqualTo is a class-level ValidationAttribute that compares the value of two Properties of the class-instance. Look up "PropertiesMustMatchAttribute" for a similar implementation.