3

次のコードでは、なぜページ上のすべてのコントロールをValidatorValidate(v)検証するのですか?RequiredFieldValidator実行する必要はRequiredFieldValidator1ありませんRequiredFieldValidator2
これがコードです。

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script type="text/javascript">
        function check() {

            var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
            ValidatorValidate(v);

        }
        </script>    
    </head>
    <body>
        <form id="form1" runat="server">
        <div>

            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
                ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox2"></asp:RequiredFieldValidator>
            <br />
            <asp:Button ID="Button1" runat="server" OnClientClick="check()" Text="Check" />

        </div>

        </form>
</body>
</html>
4

3 に答える 3

9

check()から何かを返す必要があります。そうでない場合は、それを実行してから、パススルーして通常のページ検証を実行します。

ValidatorValidate()を呼び出した後、バリデーターが有効かどうかを確認できます

function check() {

        var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
        ValidatorValidate(v);
if (v.isvalid)
     return true;
else
     return false;
}

そこにも余分な}がありました。

また、OnClientClickのリターンをスローする必要があります

<asp:Button ID="Button1" runat="server" OnClientClick="return check()" Text="Check" />
于 2011-10-03T21:00:35.140 に答える
2

これは、ボタンをクリックすると、ポストバックでそれらすべての検証が行われるために発生します。ポストバックを停止するには、それらをグループ化するValidationGroupか、return false;fromを使用する必要があります。check()

または、を置き換えて、ニーズに基づいて条件付きチェックを実行RequiredFieldValidatorすることもできます。CustomValidator

クライアント側のバリデーター処理を本当に実行したい場合は、http://msdn.microsoft.com/en-us/library/yb52a4x0.aspx#ClientSideValidation_ClientValidationObjectModelを確認してください。

このページには、条件付き評価を処理するためのJavaScript関数がいくつかあるクライアント検証オブジェクトモデルの詳細があります。これらの方針に沿って1人が行っていたことの例については、ASPネットクライアント側の検証の検証イベントを確認してください。

具体的に何をしようとしていますか?誰かがおそらくあなたが正しい設定をするのを手伝ってくれるでしょう。

于 2011-10-03T20:55:18.180 に答える
2

あなたscriptは奇形です。

<head>
    <script type="text/javascript">
         function check() {
             var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
             ValidatorValidate(v);
         }
   </script>    
</head>

checkお使いのバージョンでは、関数が定義されていないというjavascriptエラーが発生しています。

バリデーターは常にポストバックの前にトリガーされ、関数checkは送信ボタンで呼び出されるため、2番目のバリデーターもトリガーされます。両方のバリデーターは、を明示的に呼び出さなくても、とにかく検証しますValidatorValidate

onclickをポストバックしたくない場合は、代わりにHtmlButtonを使用してください。

<input type="button" onclick="check()" value="Check" />
于 2011-10-03T20:58:25.947 に答える