DropDownListのASP.Netクライアントイベント?
-
07-07-2019 - |
質問
DropDownListのデータがコントロールにロード/バインドされたときに使用できるクライアントイベントはありますか?これが発生した場合、彼らの側でイベントをトリガーする必要があります。
基本的に、ユーザーがデータの入力を開始し、入力中にフォーカスを失う可能性があるように、データの読み込み中にコントロールをロックアウトしようとしています(珍しいことではありません)。
タグでこれを実行しようとしましたが、そこにあるメソッドは最初のポストバック後に機能しなくなったようです! (どんな助けでも大歓迎です)。回避策として、イベントを要素自体にアタッチしようとしましたが、これはonchangeイベントを使用してロックのために機能しますが、データが正常にロードされるとロックを解除できません!
アイデアはありますか?これまでの回答に感謝します:)
解決
データはサーバー側でバインドされるため、その特定のイベントのクライアント側イベントはありませんが、ページがレンダリングされた場合、データはそこにあるため、クライアントを実行することをお勧めしますdocument.loadイベントのスクリプト、またはjQueryのdocument.readyイベントのようなものを使用します。ページ(バインドされたドロップダウンを含む)の読み込みが完了すると、スクリプトが実行されます。
他のヒント
ここでは、「通知」できないという点でジェイソンは正しいです。そのようなイベントが発生したときのクライアント。できることの1つは、Page.RegisterStartupScript()メソッドを呼び出して、ページの読み込みが完了したら(そして、データバインディングを行ったポストバックが発生したと仮定して)JavaScriptで何かを行うことです。繰り返しますが、これは、サーバー側ではなく、データバインディングが完了したら、クライアント側で何かを実行することを前提としています。
アプリケーションでASP.NET AJAXを使用できますか?その場合、選択したイベントにモーダルダイアログを開いて、「処理」を表示できます。ドロップダウンリストに入力しているときにテキストを入力します。そうすれば、ユーザーは他のコントロールにアクセスできず、心配することなく必要なことを実行できます。
iは、Webサイトのマスターページで次のコードを使用します。これにより、ユーザーは完全にバインドされる前にコントロールを使用しようとしなくなります。コントロールが完全にバインドされていない場合(接続が遅い)、ページが爆発することがわかりました。
基本的に、そのページが完了していない場合、スクリプトはポストバックをハイジャックします。ページの処理が完了するまで、ユーザーが何もしないようにします。これは1年前に書いたもので、とても便利です。
-
最初にonload bodyタグをsetdopostback()に設定します
-
これをボディのスクリップブロックに追加します。
var boolDoPostBack = false; if (__doPostBack) { // save a reference to the original __doPostBack var __oldDoPostBack = __doPostBack; //replace __doPostBack with another function __doPostBack = AlwaysFireBeforeFormSubmit; } function setdopostback() { boolDoPostBack = true; } function AlwaysFireBeforeFormSubmit (eventTarget, eventArgument) { var x= document.readyState if (x != "complete") { if (x == "loading" || x == "interactive" || x == "unitialized" || x == "loaded") { //do nothing with IE postback } else if (!boolDoPostBack) { //do nothing with FireFox postback } else { //alert('Allow Postback 1'); return __oldDoPostBack (eventTarget, eventArgument); } } else { //alert('Allow Postback 2'); return __oldDoPostBack (eventTarget, eventArgument); } }