ASP.NET 自定义验证器 + WebMethod + jQuery
Posted
技术标签:
【中文标题】ASP.NET 自定义验证器 + WebMethod + jQuery【英文标题】:ASP.NET Custom Validator + WebMethod + jQuery 【发布时间】:2011-04-28 07:12:30 【问题描述】:我正在尝试实现一个 .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)
【问题讨论】:
【参考方案1】:简单的方法是将您的验证更改为:
function validatePromo(src, args)
var isValid;
$.ajax(
type: "POST",
url: "Register.aspx/IsPromoValid",
data: "'code': '" + args + "'",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (msg)
isValid = msg.d;
);
args.IsValid = isValid;
请特别注意async:false
。您第一次尝试失败的原因是在验证脚本已经检查了 args.IsValid 之后才调用 ajax 成功回调。使用 async:false,$.ajax 调用将在成功回调完成后才能完成。
最大的问题是它现在“阻塞”了任何运行验证的 js 线程。对于 ASP.Net 验证器,我认为这不是问题,但我会通过长时间运行的调用对其进行测试,以确保您不会因为连接速度较慢的任何人而搞砸您的页面。
【讨论】:
请注意,根据您的回答,我没有使用变量 isValid 我只是将 async 更改为 false。即使 msg.d 恢复正常,我也收到“不正确的代码”。以上是关于ASP.NET 自定义验证器 + WebMethod + jQuery的主要内容,如果未能解决你的问题,请参考以下文章