2

タイマーを使用してASPグラフを新しいポイントで更新するUpdatePanelがある場合に問題が発生します(基本的には、http://www.4guysfromrolla.com/articles/121609-1.aspxの「CreatingRealタイムチャート」)。タイマーが作動するたびに、ページ全体が一番上にスクロールするという問題があります。タイマーが作動したときにページのスクロール位置を維持するにはどうすればよいですか?http://www.4guysfromrolla.com/articles/111704-1.aspxおよび他のいくつかの同様のJavaScriptソリューションで手順を試しましたが、タイマーが作動するたびにx変数とy変数が消去されます。

コード:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication4._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"></asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:ScriptManager ID="scmManager" runat="server"></asp:ScriptManager>
    <asp:UpdatePanel ID="updRealtimeChart" UpdateMode="Conditional" runat="server">
        <ContentTemplate>
            <asp:Chart ID="chtRandomData" ...></asp:Chart><br />
            <asp:Repeater ID="valueRepeater"...></asp:Repeater>
            <asp:Label ID="errorLabel" Font-Bold="true" Font-Size="Larger" ForeColor="Firebrick" BackColor="Khaki" runat="server"></asp:Label>
            <asp:Timer ID="tmrRefreshChart" runat="server" Interval="300"></asp:Timer>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="periodUpdate" />
        </Triggers>
    </asp:UpdatePanel>
    ...etc rest of the page...

編集:背後のコードでは、何が起こっているのかを確認するためにこれを試しました:

public partial class _Default : System.Web.UI.Page
{
    public int count = 0;
    protected void Page_Init(object sender, EventArgs e)
    {
        Page.MaintainScrollPositionOnPostBack = true;
        count++;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        errorLabel.Text += count;
        ... }

これを実行すると、UpdatePanelはerrorLabelに「1」を継続的に追加します。これは、Page_Load関数とPage_Init関数が1回だけ発生していることを示していますが、更新パネルはまだスクロール位置をシフトしています。

4

4 に答える 4

5

javascriptでdocument.body.scrollTopを使用して、スクロール位置を保存し、後で割り当てることができます。私はそれを使用しました、そしてそれは私のために働きました。

また、試してみてください

Page.MaintainScrollPositionOnPostBack = true; 
于 2012-06-22T18:01:46.693 に答える
2

同様のシナリオがありました。私の場合、データ同期をトリガーするために1ティックが必要だったので、更新パネルが更新を行ったときにページが一番上にスクロールしないようにするために使用した解決策は、ScriptManagerの終了タグの直後にこのJavaScriptを挿入することでした。

<script type="text/javascript">
            var prm = Sys.WebForms.PageRequestManager.getInstance();
            prm.add_beginRequest(beginRequest);
            function beginRequest() {
                prm._scrollPosition = null;
            }
</script>

私はそれがあなたのために働くことを願っています。

于 2016-06-06T12:59:34.370 に答える
1

StackOverflowにはいくつかの答えがあります。これをチェックしてください:

AutoPostBackでUpdatePanelがスクロールしないようにするにはどうすればよいですか?

于 2012-06-22T19:18:36.073 に答える
1

これはおなじみの.NETバグのように見えます。タイマーコントロールでClientIDMode=Autoを設定すると、修正されるはずです

于 2012-06-22T19:40:31.860 に答える