4

テキストボックスとチェックボックスを含むAsp.Netリピーターがあります。チェックボックスがオンになっている場合、テキストボックスがゼロまたは空白の値のみを受け入れることができることを確認するクライアント側の検証を追加する必要があります。

これを実現するために、1つ以上のAsp.Netのバリデーターコントロールを使用して、クライアント側のエラーを一貫して表示したいと思います(サーバー側のエラーは別のサブシステムによって処理されます)。

Asp:CompareValidatorは、この種の複雑な比較を実行するのに十分な柔軟性がないように思われるため、Asp:CustomValidatorを確認しておきます。

私が遭遇している問題は、カスタム情報を検証関数に渡す方法がないように思われることです。チェックボックスとテキストボックスのClientIdsは実行時に不明であるため(リピーターの一部であるため)、これは問題です。

だから...私のオプションは次のようです:

  1. テキストボックスとチェックボックスをなんとかしてCustomValidatorに渡します(不可能のようです)。
  2. CustomValidatorによって渡された引数に基づいて、JavaScriptを介してTextBoxを検索します。これも可能ですか、ClientIdがあいまいな場合はどうなりますか?
  3. 検証を完全に忘れて、カスタムJavaScriptを発行します(両方のClientIdをカスタム関数に渡すことができます)。

これを実装するためのより良い方法は何かについてのアイデアはありますか?

4

2 に答える 2

2

新しいクラスでBaseValidatorを継承し、それらのIDを属性としてコントロールに渡すのが最善の方法だと思います。実行時に生成される完全なクライアント側IDを知らなくても、バリデーター内のIDを解決できるはずです。最初にサーバーで、次にクライアントで検証するデータを取得する必要があります。

于 2008-09-17T22:38:54.303 に答える
0

CustomValidatorをリピーターの中に入れることはできませんか?そうでない場合は、リピーターがバインドされ、ユーザーFindControl()がバインドされたときに動的に作成できます。

protected MyDataBound(object sender, RepeaterItemEventArgs e) {
  (CheckBox)cb = (CheckBox)e.Item.FindControl("myCheckboxName");
  (TextBox)tb = (TextBox)e.Item.FindControl("myTextBox");
}

...またはそのようなもの。私は頭のてっぺんからコードを書きました。

于 2008-09-17T22:34:50.770 に答える