J'essaie d'implémenter un validateur .NET personnalisé qui utilise $ .ajax pour interroger un WebMethod sur la même page et retourner une valeur booléenne pour indiquer si le résultat est vrai ou faux .Validateur personnalisé ASP.NET + WebMethod + jQuery
WebMethod J'utilise est très simple
[WebMethod()]
public static bool IsPromoValid(string code)
{
string promoCode = "ABCDEFG";
bool result = code.ToLower() == promoCode.ToLower();
return result;
}
Le CustomValidator ressemble à ceci
<asp:CustomValidator ID="cvPromoCode" Display="None" ControlToValidate="txtPromoCode" runat="server" ClientValidationFunction="validatePromo"
ErrorMessage="The promo code you entered is incorrect" OnServerValidate="ValidatePromoCode" />
Et simple .ajax $() ClientValidation fonction
function validatePromo(src, args) {
$.ajax({
type: "POST",
url: "Register.aspx/IsPromoValid",
data: "{'code': '" + args.Value + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
args.IsValid = msg.d;
}
});
}
Le problème est que la page est validée instantanément et n'attend pas que l'appel ajax se termine. S'il y a d'autres erreurs sur la page, il affiche le résumé de validation avec eux, mais ne montre jamais le message d'erreur du validateur personnalisé.
Je peux voir l'appel AJAX réalisés dans Firebug, et il returs la bonne réponse (dans ce cas vrai ou faux)
Boom! C'est juste mec :) – Marko
Juste une note, je n'utilise pas la variable isValid selon votre réponse je viens de changer async en false. Je recevais "Code incorrect" même si msg.d revenait comme vrai. – Marko