postback
でページの同じ位置に戻るにはどうすればよいですか。常にページのトップに表示されるようです。
私はmaintainScrollPositionOnPostBack = "true"
しかし、機能していません。
私も最近これを探しました。私が次のことを見つけるまで、挿入されるJavascriptのロードを思いつきました。
.aspxコードファイルの先頭に、以下を挿入します。
MaintainScrollPositionOnPostback="true"
.aspxの最初の文が始まります
<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
これは、更新パネルを使用してスクロールバーの位置を維持するための他のコードを追加する必要なく、私にとってはうまく機能します
MaintainScrollPositionOnPostBackを設定する方法はいくつかあります。複数試しましたか?何がポストバックをトリガーしているか、どのブラウザーをテストしたかを説明できますか?マスターページを使用していますか?
Page.MaintainScrollPositionOnPostBack = true;
を設定できます。<%@ Page MaintainScrollPositionOnPostback="true" %>
<pages maintainScrollPositionOnPostBack="true" />
に追加できますページがポストバックするときに、特定のサーバーコントロールに.Focus()を設定できます。
Google Chrome=テストに使用していますか?私は同じ問題を抱えていましたが、IEとFirefoxでテストを開始しましたが、動作していました。考えていません= Chromeはこのプロパティをサポートします。NETFramework 3.5の問題である可能性もあります。NET4.0で修正されている可能性があります
<script type="text/javascript">
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
function BeginRequestHandler(sender, args) {
if ($get('<%=Panel1.ClientID%>') != null) {
xPos = $get('<%=Panel1.ClientID%>').scrollLeft;
yPos = $get('<%=Panel1.ClientID%>').scrollTop;
}
}
function EndRequestHandler(sender, args) {
if ($get('<%=Panel1.ClientID%>') != null) {
$get('<%=Panel1.ClientID%>').scrollLeft = xPos;
$get('<%=Panel1.ClientID%>').scrollTop = yPos;
}
}
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
上記のコードをScriptManager
タグに追加し、ページ宣言にMaintainScrollPositionOnPostback="true"
を追加します
注:デフォルトのコントロールが定義されている場合、たとえページMaintainScrollPositionOnPostback = "true"であっても、ポストバック時にそのコントロールまでスクロールします。
特定のアンカーに移動したい場合は、記述されている here のような方法を使用できます。それ以外の場合は、JavaScriptを使用して上からの距離を確認し、非表示のフィールドまたはCookieに保存して、ページの読み込み後にビューをリセットする必要があります。
この質問から: 部分的なポストバックASP.NETのパネルスクロール位置を維持
MaintainScrollPositionOnPostbackの一般的な代替手段と、BeginRequestHandlerとEndRequestHandlerを使用するJavaScriptソリューションを使用して、この問題に対する答えを数日間探していました。
何も機能しませんでしたが、同じ@ waqas-rajaアルゴリズムを使用して、BeginRequestHandlerとEndRequestHandlerでjQueryを使用するかなり単純なソリューションを思い付きました。
<script type="text/javascript">
var scrollPosition = 0;
$(document).ready(function () {
$(window).scroll(function (event) {
scrollPosition = $(window).scrollTop();
});
});
</script>
<script type="text/javascript">
// It is important to place this JavaScript code after ScriptManager1
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
function BeginRequestHandler(sender, args) {
console.log('BeginRequest');
}
function EndRequestHandler(sender, args) {
$(window).scrollTop(scrollPosition);
}
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
</script>
アイデアは、ユーザーがスクロールを移動するたびにスクロールの位置をグローバル変数にキャプチャすることです。これにより、最後の位置がどれであるかがわかり、ポストバックを作成すると、EndRequestHandlerイベントが入力され、最後の位置で更新されます。マークされたユーザー
これはFirefoxとGoogleで私のために機能しましたChrome :)
Bbbwexの応答は正しいですが、MaintainScrollPositionOnPostback = "true"を両方に配置する必要があることに気付くまでに実際に時間がかかりました
ASPXページの上部。
IsPostBack内
両方の条件を満たすと動作します。
私にとって最良の解決策は、問題のあるコントロールを更新パネルでラップすることでした
<asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">
<ContentTemplate>
dropdown controls that cause postback etc..
</ContentTemplate>
</asp:UpdatePanel>
もちろん、あなたも必要です
<asp:ScriptManager ID="ScriptManager1" runat="server" />
サイトのメインフォーム内に存在する。
デフォルトのボタンを設定しないでください<form id="form1" runat="server" defaultbutton="YourDefaultButton">
。削除する defaultbutton="YourDefaultButton"
およびMaintainScrollPositionOnPostback="true"
働くでしょう。