ModelState. IsValid vs IValidateableObject в MVC3

так, согласно Gu IValidatableObject.Validate () должен вызываться, когда контроллер проверяет свою модель (то есть до ModelState.IsValid ), однако простая реализация модели IValidatableObject не делает похоже, не работает, потому что Validate (..) не вызывается.

Кто-нибудь знает, есть ли что-то еще, что мне нужно подключить, чтобы заставить это работать?

EDIT:

Вот код по запросу.

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 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(){ result };
    }
}

Действие. (Я ничего особенного в Контроллере не делаю ... )

[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);
}

Я установил точку останова в первой строке LoginModel.Validate () , и, похоже, это не сработало.

15
задан Master Morality 19 September 2010 в 16:03
поделиться