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?
Si votre appel IsUsernameAvailable() renvoie correctement true/false, veuillez également envoyer votre code de contrôleur. – rboarman
Oui, il retourne la valeur correcte. J'ai déjà posté le code pour ma méthode d'action. – Kumar
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