我遇到了一个问题,我有一个UpdatePanel,它使用计时器来触发更新带有新点的ASP图(本质上是https://web.archive.org/web/20201205213920/https://www.4guysfromrolla.com/articles/121609-1.aspx在“创建实时图表”下的指南)。我遇到了一个问题,每当计时器滴答滴答的时候,整个页面都会滚动到顶部。当计时器滴答滴答时,如何保持页面中的滚动位置?我在https://web.archive.org/web/20211020140248/https://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函数只发生过一次,但是更新面板仍在移动滚动位置。
发布于 2012-06-22 19:40:31
这看起来像一个熟悉的.NET Bug。在计时器控件上设置ClientIDMode=Auto应修复它
发布于 2012-06-22 18:01:46
您可以在javascript中使用document.body.scrollTop存储滚动位置,然后将其重新分配。我用了它对我起了作用。
也试着
Page.MaintainScrollPositionOnPostBack = true; 发布于 2016-06-06 12:59:34
我也有过类似的情况。在我的例子中,我只需要一个勾号就可以触发数据同步,所以当更新面板执行更新时,我用来避免页面滚动到顶部的解决方案是在关闭的JavaScript标记之后插入这个ScriptManager标记。
<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(beginRequest);
function beginRequest() {
prm._scrollPosition = null;
}
</script>我希望这对你有用。
https://stackoverflow.com/questions/11161652
复制相似问题