我正在尝试实现一个 .NET 自定义验证器,它使用 $.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 调用完成。如果页面上有任何其他错误,它会显示验证摘要,但不会显示来自自定义验证器的错误消息。
我可以看到在Firebug中进行了 AJAX 调用,它返回了正确的响应(在这种情况下为true或false)