2

ASPバリデーター(必須フィールド、正規表現など)と追加の検証用のJavaスクリプト関数(たとえば、2番目の日付が最初の日付よりも大きいかどうかを確認するため)を備えたASP.NETページがあります。

私は通常します:

<script type="text/javascript">

    function validate() {
        // ...
        alert('Not valid!');
        return false;
    }    
</script>


<asp:Button ID="Button1" runat="server" Text="Add" 
            OnClientClick="return validate();" OnClick="Button1_Click" />

したがって、aspとjavascriptの検証の両方に合格すると、ボタンはポストバックに進み、正常に機能します。

カスタムバリデーターを試しています:

<asp:CustomValidator ID="CustomValidator1" 
EnableClientScript="true" runat="server" ControlToValidate="TextBox1" 
ClientValidationFunction="validate();" >
</asp:CustomValidator> 

(ClientValidationFunction = "return validate();"でも試してみました)

しかし、「無効な」アラートを表示した後でも、ページは継続的にポストバックに進んでいます...何か考えはありますか?ありがとう!

4

3 に答える 3

2

CustomValidatorを使用する場合、クライアント側の検証関数はソース引数のパラメーターを受け入れる必要があります。次に、検証を失敗としてマークするには、arguments.IsValidfalseに設定します。これがCustomValidatorのMSDNページです。

function validate(source, arguments) {
   // ...

   alert('Not valid!');
   arguments.IsValid=false;
}
于 2010-10-25T17:23:27.140 に答える
0

@Jasonが書いたように、CustomValidatorを使用する場合、クライアントはソースと引数のパラメーターを除きます。CustomValidatorでクライアント側とサーバー側の両方を使用する簡単なサンプル。

CustomValidatorは、 ClientValidationFunctionプロパティとOnServerValidateプロパティを使用します。

<asp:CustomValidator ID="cvCreditCard"  runat="server" ErrorMessage="Error Message"  ControlToValidate="txtCardNumber" ClientValidationFunction="Validators.CardNumber" OnServerValidate="ValidateCreditCardValid">*</asp:CustomValidator>

クライアント側の検証:

var Validators = {
CardNumber: function (source, clientside_arguments) {

    var valid_val = true;
    var txtCardNumber = clientside_arguments.Value; //(return the ControlToValidate value)

    //make your checks here

    clientside_arguments.IsValid = valid_val;
}}

サーバー側の検証:

protected void ValidateCreditCardValid(object sender, ServerValidateEventArgs e)
    {
       //make your checks here            
       e.IsValid = false;

    }
于 2012-10-29T09:57:08.563 に答える
0

私は変数を作成することでこの問題を解決しました:

 Boolean fieldIsValid = true;

カスタム検証式メソッドでは、引数が真でない場合は値を変更します。

if(args.IsValid == false)
            {
                fieldIsValid = false;
            }
            else
            {
                fieldIsValid = true;
            }

次に、それを送信クリックメソッドにも入れます。

protected void submit_Click(object sender, EventArgs e)
        {
            if (fieldIsValid)
            {
                //submit my things
            }
        }
于 2017-06-27T16:25:57.333 に答える