Я пытаюсь реализовать .NET Custom Validator, который использует $ .ajax для запроса WebMethod на той же странице и возвращает логическое значение, чтобы указать, является ли результат истинным или ложным ,ASP.NET Custom Validator + WebMethod + jQuery
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. Если на странице есть какие-либо другие ошибки, она показывает с ними сводку проверки, но никогда не отображает сообщение об ошибке из Custom Validator.
Я могу видеть вызов AJAX, вносимый в Firebug, и returs правильный ответ (в данном случае верно или ложные)
Boom! Вот это чувак :) – Marko
Просто заметьте, я не использую переменную isValid в соответствии с вашим ответом. Я просто изменил async на false. Я получал «Неверный код», хотя msg.d возвращался как истинный. – Marko