ModelState.IsValid vs IValidateableObject in MVC3

so nach Gu IValidatableObject.Validate() sollte aufgerufen werden, wenn ein Controller sein Modell validiert (d. h. bevorModelState.IsValid) aber einfach das Modell implementieren lassenIValidatableObject scheint nicht zu funktionieren, weilValidate(..) wird nicht gerufen.

Weiß jemand, ob es noch etwas gibt, das ich verkabeln muss, damit es funktioniert?

BEARBEITEN

Hier ist der angeforderte Code.

public class LoginModel : IValidatableObject
{
    [Required]
    [Description("Email Address")]
    public string Email { get; set; }

    [Required]
    [Description("Password")]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [DisplayName("Remember Me")]
    public bool RememberMe { get; set; }

    public int UserPk { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var result = DataContext.Fetch( db => {

            var user = db.Users.FirstOrDefault(u => u.Email == Email);

            if (user == null) return new ValidationResult("That email address doesn't exist."); 
            if (user.Password != User.CreateHash(Password, user.Salt)) return new ValidationResult("The password supplied is incorrect.");

            UserPk = user.UserPk;
            return null;
        });

        return new List<ValidationResult>(){ result };
    }
}

Die Aktion. (Ich mache nichts spezielles im Controller ...)

[HttpPost]
public ActionResult Login(LoginModel model)
{
    if (ModelState.IsValid)
    {
        FormsAuthentication.SetAuthCookie(model.Email, model.RememberMe);
        return Redirect(Request.UrlReferrer.AbsolutePath);
    }

    if (ControllerContext.IsChildAction || Request.IsAjaxRequest())
        return View("LoginForm", model);

    return View(model);
}

Ich setze einen Haltepunkt in der ersten Zeile vonLoginModel.Validate() und es scheint nicht getroffen zu werden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage