ホームページ > 記事 > ウェブフロントエンド > 検証コントロールの OnClientClick イベントと Button_javascript スキルの詳細な分析
1. イベント
これは私が長い間無視してきたか、発見できなかった問題です。問題は次のとおりです。
ページに検証コントロールがあり、Button コントロールが OnClientClick イベントをトリガーし、このイベントが true と false を返すと、検証コントロールは無効になり、機能しなくなります。具体的な説明は次のとおりです。
.Net ページは次のとおりです:
2. イベントへの応答
何が起こっているのですか?まず、ButtonTest の OnClientClick イベントを削除した後、検証コントロールが機能しました。これはなぜでしょうか?ページのソース コードを確認したところ、ButtonTest コントロールが次のソース コードを生成していることがわかりました:
このソース コード行からわかるように、検証コントロールはクライアント側で JavaScript コードを生成し、TextBox の値が空かどうかを確認します。 ButtonTest の OnClientClick を追加した後、ソース コードを再確認しました。ButtonTest コントロールによって生成されたソース コードは次のとおりです。
このコード行から、クライアント側でどこに問題があるのかが明確にわかります。この例では、カスタム JavaScript が最初に実行され、次に検証コントロールによって生成された JavaScript が実行されます。検証制御は意味を失います。
3. 応答制御
問題がどこにあるのかがわかっていれば、解決はより簡単になります。私の解決策は次のとおりです。カスタム JavaScript (returnconfirm('Are you always want to submit?') を実行する前に、ページ上のコントロールを確認してください。ルールに準拠するため、ButtonTest の OnClientClick イベントを次のように変更しました。4.追記
これは私が無視すべき問題と解決策であると知っていましたが、この問題を発見したとき、私は冷や汗をかきました。そうでないと悲惨なことになるでしょう。ここから、厳密なサーバー側検証を指定することがいかに必要であるかもわかります :-)。これにより、「ハッカー」がクライアントの検証を回避することを防ぐだけでなく、自分自身が気付かないエラーによって引き起こされるデータの不正確性も防ぐことができます。
注:
Page_ClientValidate()、この関数は Microsoft 検証コントロールを含む aspx ページで使用され、ユーザー入力操作が正当かどうかに応じて True または False を返します
直接判断できる。