CustomValidator
をクライアントサイドコードに使用すると、すべてのエラーメッセージが表示され、フォームの送信をブロックし、サーバー側で検証が繰り返されるようになることをお勧めします。クライアント-sideバリデーションが利用可能であることは、ユーザがそれを見たことを意味しません。サーバでの入力を常に確認してください。
あなたCustomValidator
はその後、Ajaxのメソッドを呼び出すようにコード化されるだろう、とクライアントに正しくエラーメッセージが表示されるでしょう:
<asp:Label ID="UserNameLabel" AssociatedControlID="UserName" runat="server">
UserName *:</asp:Label>
<asp:TextBox ID="UserName" runat="server" />
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server"
ControlToValidate="UserName" EnableClientScript="true"
ErrorMessage="You must supply a username!" />
<asp:CustomValidator ID="UserNameCustom" runat="server"
ControlToValidate="UserName"
ClientValidationFunction="CheckExisting"
OnServerValidate="UserNameCustomValidate"
ErrorMessage="Username already taken" />
そして、あなたのClientValidationFunctionは、次のようになります。(
<script type="text/javascript">
function CheckExisting(source, arguments) {
// Pass the arguments.Value to your AJAX call:
if (ajaxCallUserNameTaken(arguments.Value)) {
arguments.IsValid = false;
}
}
</script>
明らかに、ページメソッド/ Webサービス/ etcを呼び出すには、ajaxCallUserNameTakenメソッドを記述する必要があります。
検証方法が期待どおりに行われることを確実にします。これは、ユーザがテキストボックスからタブアウトするたびに呼び出され、値が(テキストボックスが空の場合は呼び出されません)となり、ユーザが一意の値を提供するまでページを送信できなくなります。また、OnServerValidate
で参照されているメソッドを作成して、サーバーにヒットした後でも値が有効であることを確認する必要があります。コードの重複を減らすためにAJAXエンドポイントが使用するコードと同じコードを呼び出す必要があります。
私はもともとあなたがonBlur
イベントでいくつかのチェックを行うには、クライアント側でPage_Validators
オブジェクトを使用することができることを示唆するつもりだったが、私は本当にそれがより疼痛をもたらすとして、これはここに適しているとは思わない:
- それは、ページ上に複数のバリデータがあるかもしれませんが、私たちは制御のうち、ユーザが移動した場合のRequiredFieldValidatorは
OnBlur
中に発射されていない
- をチェックしているコントロール上の唯一のRequiredFieldValidatorがあることを前提としてい値を設定せずに - 値を設定してクリアする場合にのみ、
isvalid
がtrue
、空の文字列をチェックする必要があります。
どちらの要件に対してもサーバー側の検証を実行しない理由は、検証コントロールの検証を行うことができるかどうかはわかりません。 –
投稿する前に確認したい場合は、そのクライアント側で行う必要があります。必要なフィールドバリデーターのようなものは、EnableClientScript = "true"に設定する必要があります。テキストボックスを終了した直後に検証する必要があります。 – Peter
@ムハンマドアワーズ、私はアヤックスの仕事をしたいと言いました:) 私はサーバーに行くべきだと感じますか/ – user576510