1

UpdatePanel 内には多くのチェックボックスがあり、その ' AutoPostback' を " true" に設定する必要があります。

問題:

パネルに 100 個のチェックボックスがあり、#50 のチェックボックスをチェックすると、コントロールが自動的にページの上部に移動し、別のチェックボックス (#60 など) をチェックするためにもう一度降りる必要があるとします。

これはユーザーにとって非常に迷惑であり、ユーザーが同じ場所にとどまり、別のチェックボックスをオンにできるように、この自動スクロールを停止するよう求められます。ウェブページが毎回一番上に表示されるのを止めるにはどうすればよいですか?

このような動作を無効にする方法はありますか? UpdatePanel が問題になる可能性があると思います..もしそうなら、どうすれば自動参照を無効にできますか?

4

3 に答える 3

1

UpdatePanel の使用を停止するか、UpdateMode をConditionalに設定します。

UpdateModeプロパティがConditionalに設定されている場合、次のいずれかが true の場合、UpdatePanel コントロールのコンテンツが更新されます。

  • その UpdatePanel コントロールのトリガーによってポストバックが発生した場合
  • UpdatePanel コントロールの Update メソッドを明示的に呼び出す場合
  • UpdatePanel コントロールが別の UpdatePanel コントロール内にネストされ、親パネルが更新される場合
  • ChildrenAsTriggersプロパティが true に設定されていて、UpdatePanel コントロールの子コントロールによってポストバックが発生した場合。ネストされた UpdatePanel コントロールの子コントロールは、親パネルのトリガーとして明示的に定義されていない限り、外側の UpdatePanel コントロールを更新しません。
于 2013-01-16T17:08:56.737 に答える
0

あなたのページディレクティブに以下を追加してください

MaintainScrollPositionOnPostback="true"

于 2015-01-15T10:26:04.700 に答える
0

これを行う方法は組み込まれていません。これを実現するには、いくつかの Javascript 関数を記述する必要があります。

非表示のフィールドで「hfScrollvalue」と言うことができます (スクロール位置を保存してリセットするため)

  • JS メソッド「GetScrollPosition」を記述して、パネルのスクロール位置を取得し、隠しフィールドに保存します

  • 非表示フィールドからスクロール位置を取得し、パネルに戻す JS メソッド「SetScrollPosition」を記述します。

  • この目的のためのハンドラーを追加することで、リクエストが終了したときに SetScrollPosition メソッドを呼び出すことができます。

  • リクエストが終了した後、更新パネルによってスクロール位置が再度設定されます。そのため、値をパネルのスクロール位置に設定する際に少し遅延させることができます。これは、Javascript の setTimeout メソッドを使用して行うことができます。したがって、この遅延により、保存された位置は ajax 処理が完了した後にパネルに設定されます

    function GetScrollPosition() {
        document.getElementById('<%= hfScrollvalue.ClientID %>').value = document.getElementById('<%= Panel1.ClientID %>').scrollTop;
    

    }

    関数 SetScrollPosition() {

            document.getElementById('<%= Panel1.ClientID %>').scrollTop = document.getElementById('<%= hfScrollvalue.ClientID %>').value; 
        } 
    } 
    
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest); 
    
    function EndRequest(sender, args) { 
    
        setTimeout('SetScrollPosition()', 60); 
    }
    

    UpdatePanel 内にあり、Timer にも関連付けられている TextBox を使用している場合は、次のようにすることができます。

    Sys.Application.add_init(DownloadInit);
    
    function DownloadInit(sender) {
    
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest);
    
    }
    
    function SetScrollPosition() {
    
        var textArea = document.getElementById('<%=TextBox1.ClientID%>');
    
        textArea.scrollTop = textArea.scrollHeight;
    
    }
    
    function EndRequest(sender, args) {
    
         SetScrollPosition();
    
    }
    
于 2013-01-16T17:09:14.027 に答える