Estoy tratando de implementar un Validador .NET personalizado que use $ .ajax para consultar un WebMethod en la misma página y devolver un valor booleano para indicar si el resultado es verdadero o falso .Validador personalizado de ASP.NET + WebMethod + jQuery
El WebMethod que estoy usando es muy simple
[WebMethod()]
public static bool IsPromoValid(string code)
{
string promoCode = "ABCDEFG";
bool result = code.ToLower() == promoCode.ToLower();
return result;
}
El CustomValidator se parece a esto
<asp:CustomValidator ID="cvPromoCode" Display="None" ControlToValidate="txtPromoCode" runat="server" ClientValidationFunction="validatePromo"
ErrorMessage="The promo code you entered is incorrect" OnServerValidate="ValidatePromoCode" />
y el simple $ .ajax() ClientValidation función
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;
}
});
}
El problema es que la página se valida instantáneamente y no espera a que termine la llamada ajax. Si hay otros errores en la página, muestra el Resumen de validación con ellos, pero nunca muestra el mensaje de error del Validador personalizado.
puedo ver la llamada AJAX que se realizan en Firebug, y returs la respuesta correcta (en este caso cierto o falsa)
Boom! Eso es todo tío :) – Marko
Solo una nota, no estoy usando la variable isValid según tu respuesta. Acabo de cambiar la asincronía a falso. Obtenía el "Código incorrecto" aunque msg.d volvía a ser verdadero. – Marko