如何在asp.net中回页后保持页面滚动位置

   var xPos1, yPos1; var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_pageLoading(pageLoadingHandler); prm.add_pageLoaded(pageLoaded); function pageLoaded(sender, args) { $get('').scrollLeft = xPos1; $get('').scrollTop = yPos1; } function pageLoadingHandler(sender, args) { xPos1 = $get('').scrollLeft yPos1 = $get('').scrollTop; }   

不行,我哪里错了

   

我试图使页面保持在每5秒后页面刷新的同一位置,页面将返回顶部。 我试过Page MaintainScrollPositionOnPostback =“true”。 它没用,我尝试使用Ajax但不知道如何使用它。 有人可以帮助我如何使用Ajax。

MaintainScrollPositionOnPostback仅适用于IE。 要执行此操作,您可以滚动自己的客户端脚本,也可以在页面/表单的不同部分使用锚点链接。

类似的问题:

MaintainScrollPositionOnPostback无效 – 如何调试?

MaintainScrollPositionOnPostback无法使用javascript:__ doPostBack

在Web.config中设置后,maintainScrollPositionOnPostback =“true”不能全局工作,但在页面级别工作,我该怎么办?

在您的设计页面上尝试以下代码..它对我来说很好..

 <%@ Page Language="VB" AutoEventWireup="false" CodeFile="frmName.aspx.vb" Inherits="frmName" MaintainScrollPositionOnPostBack = "true" %> 

对于听起来糟糕的UI(每5秒页面刷新一次)的便宜修复方法是添加“#”和要保留在地址栏中的URL的元素的ID,但这会自动滚动到顶部ID链接元素。

如果这是一个商业产品并且你赶时间,我建议你查看JQuery的ajax实现并完全取消这些重新加载。

它可能像一条线一样简单:

  $.ajax( { url:"/thisPath/requestPath", complete:function(data){ //apply data (the http-response) to HTML } ); 

如果这看起来很奇怪,那只是一个对象文字被提供给JQuery对象的ajax方法。 当收到http响应时,分配给’complete’的函数将作为参数’data’提供给函数,该参数在.ajax方法的内部建立。

从性能角度来看,UpdatePanels非常糟糕。 我会用jquery做这个并完全避免回发。

 $.ajax({ url: "/path/to/url/that/returns/users", type: "POST", dataType: "json", data: {}, success: function(data, status, xhttp) { var html = ""; for ( var i = 0; i < data.length; i++ ) { html += ""; html += ""; // build up table cells html += ""; } html += "
"; $("#NameOfDivToPutTableIn").html(html); } });

如果这是一个选项,请根据本教程设置要读取的URL:

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

如果您不想使用jquery,您仍然可以使用MS AJAX,只需跳过这些更新面板即可。 http://www.geekzilla.co.uk/View7B75C93E-C8C9-4576-972B-2C3138DFC671.htm

<%@ Page MaintainScrollPositionOnPostback="true" %>因为plage声明将保持滚动位置,因为它是

 @{ }      
1. This is a sample text
2. This is a sample text
3. This is a sample text
4. This is a sample text
5. This is a sample text
6. This is a sample text
7. This is a sample text
8. This is a sample text
9. This is a sample text
10. This is a sample text
11. This is a sample text
12. This is a sample text
13. This is a sample text
14. This is a sample text
15. This is a sample text
16. This is a sample text
17. This is a sample text
18. This is a sample text
19. This is a sample text
20. This is a sample text
21. This is a sample text
22. This is a sample text
23. This is a sample text
24. This is a sample text
25. This is a sample text

对于其他正在努力解决这个问题的人 最简单的解决方案是保持整个窗口的滚动位置

  var xPos, yPos; Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (evt, args) { window.scrollTo(xPos , yPos); }); Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(function (evt, args) { xPos = $(window).scrollLeft(); yPos = $(window).scrollTop(); }); 

广告包括开始和结束请求。 在开始请求时使用Jquery获取窗口滚动位置。 在结束请求时,只需滚动到该位置即可。

在后面的代码中尝试这个:

 protected void Page_Load(object sender, EventArgs e) { if (Page.IsPostBack) { Page.MaintainScrollPositionOnPostBack = true; } } 

Posdata:我用C#试了一下。

添加此行

 <%@ Page MaintainScrollPositionOnPostback="true" %> 

这个问题在网上都有答案,而且个人都没有工作,因为对我来说Firefox会尝试恢复上一个滚动位置(错误地),触发window.scroll事件,这将覆盖我的隐藏字段,错误位置,我的卷将随后读取。 (我有来自回发的网格视图,然后自动折叠一些行。)

所以这里是这个问题的另一个解决方案 – 我决定我只想在提交后恢复滚动位置,而不是刷新,所以这是足够的:

ASPX页面:

 

使用Javascript:

 function restoreScroll() { var position = parseInt($('#hfScroll').val()); if (!isNaN(position)) { $(document).scrollTop(position); } }; var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_pageLoaded(restoreScroll); 

出于某种原因,在浏览器刷新时,我的隐藏输入没有重置为零,所以这有时表现得很奇怪。 我很想知道这是做什么的,我认为它是Firefox,因为它不会发生在IE上,但是生命太短[他说…已经下载了一半的互联网,花了几个小时就完成了这个……]。