12

フォームに を付けましたCustomValidator。私はそのControlToValidateプロパティを設定していません。そのServerValidateイベントで、私は次のように書いています。

protected void CustomValidator1_ServerValidate(object source,      
                                               ServerValidateEventArgs args)
{
    args.IsValid = false;
}

このメソッドにブレークポイントを設定しましたが、そのポイントに到達することはないようです。しかし、これを別のフォームで行うと、魅力的に機能します。

  1. ValidationGroupボタンと の両方のプロパティCustomValidatorは同じです
  2. ボタンと の両方でこのプロパティを削除しようとしましたがCustomValidator、まだ機能しません。

フォーム全体に何かがあるようです。フォームに を配置しただけで、イベント メソッドCustomValidatorを設定する以外のプロパティには何も触れません。ServerValidate

編集: aspx の部分は次のとおりです。

 <asp:CustomValidator ID="CustomValidator2" runat="server" 
       ErrorMessage="This is a test" 
   onservervalidate="CustomValidator1_ServerValidate" 
   ValidationGroup="PA"></asp:CustomValidator>


<asp:Button ID="btnPensionersOK" runat="server" Text="OK" Width="75px" 
          onclick="Button1_Click" ValidationGroup="PA" />
4

2 に答える 2

28

ボタンクリックハンドラーで次の方法で検証を強制してみてくださいPage.Validate

protected void Button1_Click(Object sender, EventArgs e)
{
    Page.Validate();
    if(Page.IsValid)
    {
       // servervalidate should have been called
    }
}

編集(コメントから):

コントロールで何も入力/選択されていないかどうかをcustomvalidatorで検証する場合は、ValidateEmptyTexttrueに設定する必要があります。CustomValidatorまた、を置き換えてもらうこともできますRequiredFieldValidators

aspxのvalidator-orderは、前のValidatorがすでに作成した場合にcustomvalidatorのsevervalidateが呼び出されるかどうかを決定すると思いPage.IsValid=falseます。SeverValidateまたは、ASP.NETは非常にスマートであるため、単純なtext-is-emptyチェックよりもコストがかかると想定されます。

于 2012-04-16T10:43:49.513 に答える
1

また、CustomValidators と RequiredFieldValidators を同時に使用する人のために、さらにヘルプを提供したいと思います。クライアント側の検証が最初に行われることを考慮する必要があります。また、サーバー側の検証は PostBack の後にのみ行われます。わかっていると思いますが、これが明確でない場合に備えて: まず、特定のクライアント側の作業バリデーターにバインドされているすべてのコントロールが、ポストバックを発生させるために有効である必要があることを意味します。ページの後。IsValid is True サーバー側の処理が行われ、サーバー側の検証メッセージを含むすべての変更がポストバックされます。

したがって、CustomVCalidators と他の組み込みバリデーターの両方を同時に機能させる方法は次のとおりです。

  1. バリデーターの両方のグループをクライアント側で動作するように設定します。この場合、カスタム バリターに対して、クライアント側で検証を行うスクリプトを指定する必要があります。スクリプトを記述せずに ServerValidate メソッドに入力するだけで、サーバーで検証が行われます。EnableClientScript プロパティが True に設定されている場合でも。

  2. バリデータの両方のグループをサーバー側で動作するように設定します。これを行うには、EnableClientScript を False に設定するだけです。ただし、これによりサーバーがロードされることに注意してください。

于 2012-04-16T13:09:34.460 に答える