Я пытаюсь реализовать .NET Custom Validator, который использует $ .ajax для запроса WebMethod на той же странице и возвращает логическое значение, чтобы указать, является ли результат истинным или ложным.
Используемый мной WebMethod действительно прост
[WebMethod()]
public static bool IsPromoValid(string code)
{
string promoCode = "ABCDEFG";
bool result = code.ToLower() == promoCode.ToLower();
return result;
}
CustomValidator выглядит следующим образом
<asp:CustomValidator ID="cvPromoCode" Display="None" ControlToValidate="txtPromoCode" runat="server" ClientValidationFunction="validatePromo"
ErrorMessage="The promo code you entered is incorrect" OnServerValidate="ValidatePromoCode" />
И простой $ .ajax () ClientValidation функция
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;
}
});
}
Проблема заключается в том, что страница проверяется мгновенно и фактически не ожидает завершения вызова ajax.Если на странице есть какие-либо другие ошибки, на них отображается сводная информация о проверке, но никогда не отображается сообщение об ошибке из пользовательского валидатора.
Я вижу, как выполняется вызов AJAX в Firebug и возвращает правильный ответ (в данном случае true или false )