5

特定のテキスト入力要素に接続されているクライアント側の検証ルーチンを実行したいと思います。

検証は、以下を使用して設定されていますCustomValidator

<asp:textbox id="AddEstTime" runat="server" Width="55px"></asp:textbox><br />
<asp:CustomValidator ID="AddEstTimeCustomValidator" ClientValidationFunction="AddEstTimeCustomValidator_ClientValidate" OnServerValidate="AddEstTimeCustomValidator_ServerValidate" ErrorMessage="Please enter a time" ControlToValidate="AddEstTime"  runat="server" Display="Dynamic" ValidateEmptyText="true"/>
<asp:CheckBox ID="AddIsTM" runat="server" Text="T&amp;M" />

とjavascript:

function AddEstTimeCustomValidator_ClientValidate(sender, args) {
    var checkbox = $("input[id$='IsTM']");
    args.IsValid = checkbox.is(":checked") || args.Value.match(/^\d+$/);
}

「AddIsTM」の状態が変化した場合、接続された「AddEstTimeCustomValidator 」を使用して「AddEstTime」CheckBoxを再検証したいと思います。textboxCustomValidator

フォーカス->文字の再フォーカス->文字の削除を認識しています。私はもっ​​と正しい方法を見つけようとしています。asp.NETの新機能。

4

3 に答える 3

4

マイクロソフトのクライアント側コードを調べた後、うまくいくように見えるこれを思いつきました:

// client-side validation of one user-control.
// pass in jquery object with the validation control
function ValidateOneElement(passedValidator) {
    if (typeof (Page_Validators) == "undefined") {
        return;
    }
    $.each(Page_Validators, function (index, value) {
        if ($(value).attr("id") == passedValidator.attr("id")) {
            ValidatorValidate(value, null, null);
        }
    });
}

Page_ClientValidateこれは、関数を調べた後です。

function Page_ClientValidate(validationGroup) {
    Page_InvalidControlToBeFocused = null;
    if (typeof(Page_Validators) == "undefined") {
        return true;
    }
    var i;
    for (i = 0; i < Page_Validators.length; i++) {
        ValidatorValidate(Page_Validators[i], validationGroup, null);
    }
    ValidatorUpdateIsValid();
    ValidationSummaryOnSubmit(validationGroup);
    Page_BlockSubmit = !Page_IsValid;
    return Page_IsValid;
}
于 2012-05-18T02:04:57.033 に答える
1

最終的に ASP.NET バリデーターに固執したい場合は、 Validation Groups を悪用できますが、このアプローチでは問題が発生するだけだと思います。他のオプションは、クライアントでjQueryを使用することです(ナイスリスト)。サーバー側で検証を複製するか、クライアント検証からサーバーメソッドを呼び出すことを避ける必要があります。

于 2012-05-16T22:41:01.253 に答える