2016-08-04 19 views
1

私が開発しているアプリケーションでは、ASP.NET Webフォームによって提供される検証コントロールと、使用しているフォームの特定の部分JavaScript。ASP.NET WebForms - JavaScriptの検証と検証コントロールを同時に実行する

[Submit]ボタンをクリックすると、まずASP.NETの検証が行われ、次にJavaScriptで行われたカスタム検証が行われます。その結果、フォームが不完全で送信されると、ASP.NET検証エラーのみが表示され、これらのエラーが修正されてフォームが送信されると、検証エラーが表示されます。

私が望むのは、ユーザーが[送信]ボタンをクリックすると、ASP.NET検証とJavaScript検証が同時に行われるため、ユーザーはすべてのエラーを一度に見ることができるということです。

<form id="StudentLSFApplication" runat="server" onsubmit="return validateForm()"> 
    <!--other html code--> 
    <asp:Button ID="SaveLSFApplication" runat="server" Text="Save Application" OnClick="saveApplication" 
      ValidationGroup="AllValidation" /> 
</form> 

<script> 
    function validateForm() { 
     //my validation 
    } 
</script> 

あなたは私のサンプルコードから見ることができるように、私はvalidateForm()onsubmitイベントに呼び出されるJavaScript関数を持っている、とButton制御がAllValidation検証グループの一部です。現時点では、フォーム提出時にAllValidationが最初に発生し、それが問題なければvalidateForm()が発生します。

答えて

2

あなたが探しているものは、CustomValidatorだと思います。

<script type="text/javascript"> 
     function validateFormElement(sender, args) { 
      if (args.Value == "waarde") { 
       args.IsValid = true; 
      } else { 
       args.IsValid = false; 
      } 
     } 
    </script> 

    <asp:TextBox ID="TextBox1" runat="server" ValidationGroup="myValidation"></asp:TextBox> 

    <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Input error" ValidationGroup="myValidation" ClientValidationFunction="validateFormElement" ControlToValidate="TextBox1"></asp:CustomValidator> 

    <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="myValidation" /> 

その他のバリデータは引き続き使用できます。その1つのjavascript関数に必要なすべてのバリデーションを詰める必要はありません。

+0

マイクロソフトが提供する他のバリデータを使用することをお勧めします。また、より複雑な場合は、検証/制御の種類ごとに 'CustomValidator 'を使用することをお勧めします。 ASP.NETバリデータはJavaScript **とC#(コードビハインド)**で検証されるため、優れています。 JavaScriptはバイパスすることができるので、 'CustomValidator'のイベントの後ろにコードを追加して、JavaScriptだけでなくC#でもバリデーションをプログラムする必要があります。 'CustomValidator'は1つのコントロールだけを指しますが、他のバリデータと同じ機能を共有できます。 'ControlToValidate'を設定する必要があります。 – modiX

+0

上記の例は、1つの関数で完全な検証ではなく、フォーム内の単一のコントロールに対するものです。それをもっと明確にするために答えを少し編集しました。しかし、 'CheckBox1がチェックされている場合はTextBox1にデータが含まれている必要があります'など、複数のコントロールに対してより複雑なクライアント側の検証を行いたい場合は、CustomValidatorが起動するようにControlToValidateを省略することができます。そして、modiXが示唆しているように、常にコード内で検証を行います。 – VDWWD

+0

これはうまくいきました、ありがとう! – RoyalSwish

関連する問題