Sto cercando di implementare un validatore personalizzato .NET che utilizza $ .ajax per interrogare un WebMethod sulla stessa pagina e restituire un valore booleano per indicare se il risultato è vero o falso .Validatore personalizzato ASP.NET + WebMethod + jQuery
Il WebMethod che sto utilizzando è davvero semplice
[WebMethod()]
public static bool IsPromoValid(string code)
{
string promoCode = "ABCDEFG";
bool result = code.ToLower() == promoCode.ToLower();
return result;
}
Il CustomValidator assomiglia a questo
<asp:CustomValidator ID="cvPromoCode" Display="None" ControlToValidate="txtPromoCode" runat="server" ClientValidationFunction="validatePromo"
ErrorMessage="The promo code you entered is incorrect" OnServerValidate="ValidatePromoCode" />
E il semplice $ .ajax() ClientValidation funzione
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;
}
});
}
Il problema è che la pagina si convalida istantaneamente e in realtà non aspetta che la chiamata ajax termini. Se ci sono altri errori nella pagina, mostra il Riassunto della convalida con loro, ma non mostra mai il messaggio di errore dal Custom Validator.
posso vedere la chiamata AJAX compiuti in Firebug, e returs la risposta giusta (in questo caso vero o falsa)
Boom! Quello è il tizio :) – Marko
Solo una nota, non sto usando la variabile isValid come da tua risposta ho appena cambiato async in falso. Stavo ottenendo "Codice errato" anche se msg.d tornava come vero. – Marko