24

いくつかの TextBoxes と送信ボタンを備えた単純な aspx ページがあります。一部のフィールドは必須で、ボタンの下には ValidationSummary があります。完全なフォームは画面の高さよりも大きいため、送信ボタンに到達するには下にスクロールする必要があります。すべての必須フィールドに入力せずに送信検証をクリックすると、期待どおりに検証が失敗し、検証の概要にボタンの下にいくつかの情報メッセージが表示されます。検証はクライアントで行われ、ポストバックは発生しません。

したがって、これはすべて希望どおりに機能します。しかし気になるのは、送信ボタンをクリックするとページが一番上に移動 (「ジャンプ」) することです。検証の概要を表示するには、ページをもう一度下に移動する必要があります。

ShowSummaryプロパティを次のように設定しようとしましたfalse(あまり意味がありません): 検証は引き続き機能します (ポストバックなし) が、この場合、ページは最上位に移動しません。したがって、問題は検証テキストのレンダリングに依存しているようです。

このページジャンプを防ぐ方法はありますか?

前もって感謝します!

アップデート:

上記の動作は、ブラウザに依存していないようです。5 つの異なるブラウザーでテストしましたが、どこでも同じです。

4

8 に答える 8

33

asp.net ( http://forums.asp.net/p/1545969/3779312.aspx ) で質問したところ、2 つの解決策が返ってきました。より良いのは、スクロール位置を維持する次の Javascript です。

<script type="text/javascript">
    window.scrollTo = function( x,y ) 
    {
        return true;
    }
</script>

これはページに載せるだけで、どこにも電話することはできません。

もう 1 つのソリューションは、ここでの RioTera の提案 (を使用MaintainScrollPositionOnPostBack) に似ていますが、バリデーターに追加EnableClientScript="false"してポストバックを強制します。それも機能しますが、価格は人為的なポストバックです.

于 2010-04-11T21:10:50.343 に答える
23

Page プロパティ MaintainScrollPositionOnPostBack を使用できます。

コード ビハインドで:

Page.MaintainScrollPositionOnPostBack = true;

またはあなたのウェブフォームで:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" MaintainScrollPositionOnPostback="true" %>
于 2010-04-10T13:11:15.117 に答える
6

ページ フォーカスPage.SetFocus(control); を設定してみてください。グリッドビューに余分な行を追加する挿入ボタンがあります。これは、ページ上の多くの項目の 1 つでありPage.SetFocus(control)、btnInsert_Click イベントの最後のメソッドとして追加できます。

于 2012-03-19T17:30:53.753 に答える
4

プロパティを設定することがわかりました:

maintainScrollPositionOnPostBack="true"

あなたのWeb.config <pages>セクションではうまくいきます。

于 2015-06-08T18:10:39.173 に答える
1

残念ながら、最新のブラウザーでは MantainScrollPositionOnPostback が機能しなくなりました。クロスブラウザー互換ソリューションの場合、次のスニペットを使用できます (jQuery が必要です)。

<asp:HiddenField runat="server" ID="hfPosition" Value="" />
<script type="text/javascript">
    $(function () {
        var f = $("#<%=hfPosition.ClientID%>");
        window.onload = function () {
            var position = parseInt(f.val());
            if (!isNaN(position)) {
                $(window).scrollTop(position);
            }
        };
        window.onscroll = function () {
            var position = $(window).scrollTop();
            f.val(position);
        };
    });
</script>

こちらの私の回答も参照してください。

于 2014-12-16T13:47:19.890 に答える
1

ページ全体がサーバーにポストバックされ、コンテンツがサーバーから再度送信されるため、ページがちらつきます。UpdatePanel タグを使用して、更新する場所を囲む必要があります。タグ内の情報のみをポストバックします

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
    <!-- Place updatable markup and controls here. -->
</ContentTemplate>
</asp:UpdatePanel>

http://msdn.microsoft.com/en-us/library/bb386573(v=vs.100).aspx#CodeExamplesを読む

于 2013-01-14T23:05:42.233 に答える