2

DropDownList のデータがコントロールにロード/バインドされたときに使用できるクライアント イベントはありますか? これが発生した場合、私は彼らの側でイベントをトリガーする必要があります。


基本的に、ユーザーがデータの入力を開始し、入力中にフォーカスを失う可能性があるかのように、データの読み込み中にコントロールをロックアウトしようとしています (珍しいことではありません)。

タグでこれを実行しようとしましたが、そこにあるメソッドは最初のポストバック後に機能しなくなったようです! (どんな助けでも大歓迎です)。回避策として、要素自体にイベントをアタッチしようとしましたが、これは onchange イベントを使用してロックできますが、データが正常にロードされたときにロックを解除できません!

何か案は?これまでの回答に感謝します:)

4

4 に答える 4

3

データはサーバー側でバインドされるため、その特定のイベントに対するクライアント側イベントはありませんが、ページがレンダリングされたデータはそこにあるため、クライアント スクリプトをdocument.load イベント、または jQuery の document.ready イベントのようなものを使用します。これにより、ページ (バインドされたドロップダウンを含む) の読み込みが完了すると、スクリプトが実行されます。

于 2008-11-10T15:49:47.200 に答える
1

アプリケーションでASP.NETAJAXを使用できますか?その場合、選択したイベントでモーダルダイアログを開き、ドロップダウンリストに入力しているときに「処理中」のテキストを表示できます。そうすれば、ユーザーは他のコントロールにアクセスできなくなり、心配することなく必要なことを実行できます。

于 2008-11-13T15:13:55.457 に答える
1

このようなイベントが発生したときにクライアントに「通知」できないという点で、ジェイソンはここで正しいです。できることの 1 つは、Page.RegisterStartupScript() メソッドを呼び出して、ページの読み込みが完了したら (そして、データバインディングを行ったポストバックが発生したと仮定して)、JavaScript で何かを行うことです。繰り返しますが、これは、サーバー側ではなく、データ バインディングが完了したら、クライアント側で何かを実行することを前提としています。

于 2008-11-10T15:48:15.067 に答える
0

Web サイトのマスター ページで次のコードを使用します。これにより、ユーザーが完全にバインドされる前にコントロールを使用しようとするのを防ぎます。コントロールが完全にバインドされていない (接続が遅い) 場合、ページが爆発することがわかりました。

基本的に、そのページが完了していない場合、スクリプトは投稿をハイジャックします。ページの処理が完了するまでユーザーが何もできないようにします。私はこれを1年前に書きましたが、とても便利です。

  1. 最初に onload body タグを setdopostback() に設定します

  2. これを本体の scrip ブロックに追加します。

        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);
            }       
        }
    
于 2009-03-11T19:24:16.823 に答える