ASP.NET自定义validation器+ WebMethod + jQuery
我正在尝试实现一个.NET自定义validation器,它使用$ .ajax在同一页面上查询WebMethod并返回一个布尔值来指示结果是true还是false。
我使用的WebMethod非常简单
[WebMethod()] public static bool IsPromoValid(string code) { string promoCode = "ABCDEFG"; bool result = code.ToLower() == promoCode.ToLower(); return result; }
CustomValidator看起来像这样
和简单的$ .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; } }); }
问题是页面立即validation,实际上并没有等待ajax调用完成。 如果页面上有任何其他错误,它会显示validation摘要,但从不显示自定义validation程序的错误消息。
我可以看到在Firebug中进行的AJAX调用,它会重新响应正确的响应(在这种情况下为true或false )
简单的方法是将您的validation更改为:
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
。 你的第一次尝试不起作用的原因是,在validation脚本已经检查了args.IsValid之前,没有调用ajax成功回调。 使用async:false,$ .ajax调用将在成功回调完成后才会完成。
这个问题的一大问题是它现在“阻塞”任何js线程正在运行validation。 在ASP.Netvalidation器的情况下,我不认为这是一个问题,但我会用一个长时间运行的电话来测试它,以确保你没有搞任何人在慢速连接上的页面。
- 在内容页面中的更新面板之后,我的jquery选择器不起作用
- 使用带有母版页的Web方法
- 操作DOM时的ASP.NET ViewStatevalidation
- Ajax调用没有调用服务器端,并且在httpxx中显示错误为“在ajax post调用中加载内容错误(NS_ERROR_DOCUMENT_NOT_CACHED)”
- 我们如何使用asp.net,webservice和sql数据库集成jQuery自动完成?
- jquery颜色动画间歇性地抛出无效的属性值
- 模态错误 – 未捕获TypeError:undefined不是函数模态
- 从jQuery for ASP.NET设置禁用输入的值
- 未捕获的SyntaxError:意外的令牌< – 在jQuery ajax中