【问题标题】:ASP.NET Custom Validator + WebMethod + jQueryASP.NET 自定义验证器 + 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 调用,它返回正确的响应(在本例中为 truefalse

【问题讨论】:

    标签: c# asp.net jquery validation customvalidator


    【解决方案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 恢复正常,我也收到“不正确的代码”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多