Tôi đang cố triển khai .NET Custom Validator sử dụng $ .ajax để truy vấn một WebMethod trên cùng một trang và trả về giá trị boolean để cho biết kết quả là đúng hay sai .ASP.NET Custom Validator + WebMethod + jQuery
Các WebMethod Tôi đang sử dụng là thực sự đơn giản
[WebMethod()]
public static bool IsPromoValid(string code)
{
string promoCode = "ABCDEFG";
bool result = code.ToLower() == promoCode.ToLower();
return result;
}
Các CustomValidator trông như thế này
<asp:CustomValidator ID="cvPromoCode" Display="None" ControlToValidate="txtPromoCode" runat="server" ClientValidationFunction="validatePromo"
ErrorMessage="The promo code you entered is incorrect" OnServerValidate="ValidatePromoCode" />
Và đơn giản $ .ajax() ClientValidation chức năng
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;
}
});
}
Vấn đề là trang xác thực ngay lập tức và không thực sự chờ cuộc gọi ajax kết thúc. Nếu có bất kỳ lỗi nào khác trên trang, nó sẽ hiển thị Tóm tắt xác thực với chúng, nhưng không bao giờ hiển thị thông báo lỗi từ Trình xác thực tùy chỉnh.
tôi có thể thấy các cuộc gọi AJAX được thực hiện trong Firebug, và nó returs phản ứng ngay (trong trường hợp này đúng hoặc sai)
Bùng nổ! Đó là nó dude :) – Marko
Chỉ cần một lưu ý, tôi không sử dụng biến isValid theo câu trả lời của bạn tôi chỉ thay đổi async thành false. Tôi đã nhận được "Mã không chính xác" mặc dù msg.d đã trở lại là đúng sự thật. – Marko