2010-11-13 4 views
0

J'essaie d'implémenter la validation client à distance pour vérifier si un nom d'utilisateur a déjà été utilisé. J'ai lu phil haack's après et un msdn article et arriver à la mise en œuvre suivante:Validation à distance avec ASP.NET MVC2 et jQuery

public class RemoteAttribute : ValidationAttribute 
    { 
     public string Action { get; set; } 
     public string Controller { get; set; } 

     public override bool IsValid(object value) 
     { 
      return true; 
     } 
    } 


public class RemoteValidator : DataAnnotationsModelValidator<RemoteAttribute> 
{ 

    public RemoteValidator(ModelMetadata metadata, ControllerContext context, RemoteAttribute validationAttribute) : 
     base(metadata, context, validationAttribute) 
    { 
    } 

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() 
    { 
     var rule = new ModelClientValidationRule 
              { 
      ErrorMessage = Messages.DuplicateUsername, 
      ValidationType = "remote" 
     }; 

     rule.ValidationParameters.Add("url", Attribute.Controller + "/" + Attribute.Action); 
     return new[] { rule }; 
    } 
} 

Ma vue classe modèle a un attribut à distance comme suit:

[Remote(Controller = "SignUp",Action = "IsUsernameAvailable")] 
    public string Username { get; set; } 

J'utilise la validation de jquery comme suit:

jQuery.validator.addMethod("remote", function (value, element, params) { 
    if (this.optional(element)) { 
     return true; 
    } 

    if (value != '') { 
     $.post(params.url, { username: value }, function (response) { 
      return response; 
     }); 
    } 

}); 

Dans mon contrôleur, j'ai quelques méthodes d'action comme suit:

public JsonResult IsUsernameAvailable(string userName) 
    { 
     var isUsernameAvailable = _userService.IsUsernameAvailable(userName); 
     if (isUsernameAvailable) 
     { 
      return Json(true); 
     } 

     return Json(false); 
    } 

Pour une raison quelconque, même ma méthode actiom IsUsernameAvailable renvoie true, le message de validation est toujours affiché. Qu'est-ce que je fais mal ici?

+0

Si votre appel IsUsernameAvailable() renvoie correctement true/false, veuillez également envoyer votre code de contrôleur. – rboarman

+0

Oui, il retourne la valeur correcte. J'ai déjà posté le code pour ma méthode d'action. – Kumar

+0

Je veux utiliser l'attribut distant .. de votre ans j'ai une idée, mais pouvez-vous me dire .. quel est-il disponible dans MVC2 par Microsoft? – Niks

Répondre

0

Votre appel RemoteAttribute.IsValid() renvoie toujours la valeur true. Ajoutez votre contrôle IsUsernameAvailable et renvoyez true ou false selon le cas.

La fonction IsValid() indique au modèle si une erreur doit ou non être déclenchée.

0

Essayez d'envoyer la chaîne "true" et "false" au lieu des valeurs JSON avec

return Content("true") 

et

return Content("false"); 
0

essayer JSON (true, JsonRequestBehavior.AllowGet); ou Json (false, JsonRequestBehavior.AllowGet);