2

カスタム バリデータが追加されたページに ASP テキスト ボックス コントロールがほとんどありません。これらのテキストボックスを検証する保存ボタンがあります。テキストボックスと同じように検証グループを追加しました。

追加の要件を組み込むために、[保存] ボタンに onClientClick 関数を追加しました。しかし、Validation Group(validator コントロール) による Validation が実行されず、代わりに 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 チームの側で見落としがあったことには同意しますが、実装はより直感的であり、サポートされているはずです。

B

于 2011-08-01T12:19:51.417 に答える