这是我想出的解决这个问题的方法。它绝不是完美的,因为我只是 JavaScript 的菜鸟。欢迎任何和所有的编辑。
首先......请注意
“出现在命名容器中的任何服务器控件都有
它们呈现的 id 值以命名容器的 ID 为前缀
控制。”
来自https://docs.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-getting-started/master-pages/control-id-naming-in-content-pages-cs
简而言之...您有一个隐藏字段来保存滚动框顶部的值...并在页面加载时将其设置回该值。 JavaScript 中的所有代码。
1:创建隐藏字段。
<input type="hidden" id="hdnScrollTop" runat="server" value="0" />
2:用窗口顶部(this.scrollTop)的值更新隐藏字段。这是通过 onscroll 属性完成的。由于overflow: auto;,此 div 将滚动。还要注意名称“MainContent_hdnScrollTop”。
在<aps:Content> 标签上(未显示)我有ContentPlaceHolderID="MainContent"
因此您可能需要相应地更改名称。检查渲染页面上生成的名称。
<div id="divScroll" style="vertical-align: top; height: 550px; overflow: auto; width: 950px;"
onscroll="$get('MainContent_hdnScrollTop').value = this.scrollTop;">
3:您可能需要添加 scriptmanager 控件。你唯一允许的。我已经有一个 MasterPage。
<asp:ScriptManager ID="scriptManager" runat="server" EnablePartialRendering="True" />
4:将divScroll顶部设置为隐藏字段的javascript。
<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(pageLoaded);
function pageLoaded(sender, args)
{
try {
$get("divScroll").scrollTop = $get("MainContent_hdnScrollTop").value;
}
catch(err) { return;}
}
</script>