2

我在页面上有几个 ASP 文本框控件,其中添加了自定义验证器。我有保存按钮,它验证这些文本框。我刚刚添加了与文本框相同的验证组。

为了合并额外的要求,我为保存按钮添加了 onClientClick 函数。但有趣的是,由于验证组(验证器控件)没有触发验证,而是调用了 onClientClick 函数并调用了服务器端 Click 事件。

Javascript代码

function ValidateInputs(source, args) {
            var regex = /^(-{0,1}\d{1,100})$/;
            if (args.Value.length < 1) {
                $("span[id$='spn_error']").html('Please Enter ' + $(source).attr("errormessage"));
                $("span[id$='spn_error']").show();
                args.IsValid = false;
                return;
            }
            else if (!regex.test(args.Value)) {
                $("span[id$='spn_error']").html($(source).attr("errormessage") + ' allows only numbers');
                $("span[id$='spn_error']").show();
                args.IsValid = false;
                return;
            }
            else {
                if ($("span[id$='spn_error']").html().indexOf($(source).attr("errormessage")) >= 0)
                    $("span[id$='spn_error']").hide();
                args.IsValid = true;
                return;
            }
        }

function isValidTracker() {
//Dummy Code Say Confirm button
return(confirm('Are you sure');)

}

HTML 代码

<span class="errormesg" runat="server" id="spn_error" style="display: none;
                        font-size: 9px;"></span>
<asp:TextBox ID="txtLastMonthCount" runat="server" CssClass="inputbox" Width="75px" autocomplete="off" onkeypress="return isNumberKey(event);" ValidationGroup="g1"></asp:TextBox>

<asp:CustomValidator ID="CVLastMonthCount" runat="server" ErrorMessage="Last Months Closing Count" Text="<img src='../images/alert.gif' alt='Please Enter Last Months Closing Count' title='Please Enter Last Months Closing Count' />" 
    ValidationGroup="g1" ClientValidationFunction="ValidateInputs" OnServerValidate="ValidateInputs" ControlToValidate="txtLastMonthCount" ValidateEmptyText="true"></asp:CustomValidator>

<asp:Button ID="btnSave" runat="server" Text="Save" CssClass="button" ValidationGroup="g1" OnClientClick="return isValidTracker();" OnClick="btnSave_Click" />

请帮助我找到触发 onclientclick 和保存按钮单击的验证控制的解决方案。

4

4 回答 4

7

将OnClientClick 从更改return isValidTracker()if (!isValidTracker()) return false;

于 2011-08-01T12:15:24.380 回答
2

感谢您提供的解决方案。我在谷歌搜索时也得到了一个解决方案,想分享它,因为它对像我这样的其他人在其他各种情况下都有帮助。

function isValidTracker() {

    if (Page_IsValid) {
        return(confirm('Are you sure');)//Dummy Code Say Confirm button
    }
    else
    {
        return false;
    }

    }

其中 Page_IsValid 是 ASP.Net 验证控件设置的 Java 脚本变量。当所有验证控件都成功验证时,它设置为 true。谢谢 :)

于 2011-08-01T13:16:41.060 回答
1

OneHalf 的解决方案有效,但我会将最终检查放入您的验证器中 - 这可以确保您不会询问用户“您确定吗?” 直到你知道他们的行为是有效的......

    function ValidateInputs(source, args) {
    var regex = /^(-{0,1}\d{1,100})$/;
    if (args.Value.length < 1) {                 
        $("span[id$='spn_error']").html('Please Enter ' + $(source).attr("errormessage"));
        $("span[id$='spn_error']").show();                 
        args.IsValid = false;                 
    }             
    else if (!regex.test(args.Value)) {                 
        $("span[id$='spn_error']").html($(source).attr("errormessage") + ' allows only numbers');                
        $("span[id$='spn_error']").show();                 
        args.IsValid = false;                
    } else {                 
        if ($("span[id$='spn_error']").html().indexOf($(source).attr("errormessage")) >= 0)                     
            $("span[id$='spn_error']").hide();                 
        args.IsValid = true;
    }

    if (args.IsValid) args.IsValid = isValidTracker();
}  

尽管我同意 ASP.NET 团队存在疏忽 - 您的实现似乎更直观,应该得到支持。

于 2011-08-01T12:19:51.417 回答
0

你好我也面临同样的问题。CausesValidation="true" 属性解决了我的问题。

于 2017-03-31T07:28:47.777 回答