【问题标题】:Maintaining asp:table Scroll Position inside a div in ASP.NET在 ASP.NET 中的 div 内维护 asp:table 滚动位置
【发布时间】:2017-03-11 11:25:04
【问题描述】:

我在 div 中有一个 asp:Table。如何在每次回发时保持其滚动位置?

<div style="overflow: visible">
    <asp:Table ID="ReportBody" runat="server" EnableViewState="False" CellSpacing="0">
    </asp:Table>
</div>

我在 Page 指令中尝试了 MaintainScrollPositionOnPostback=true 无济于事。我还在 PageLoad 中尝试了 Page.MaintainScrollPositionOnPostback = true 并且没有用。我还尝试了一堆来自 Stackoverflow 的 JS 脚本,但没有任何效果。

谢谢。

【问题讨论】:

  • 你如何停止使用 ASP.NET Web 窗体来实现你的前端

标签: c# asp.net .net


【解决方案1】:

具体回答有点困难,因为我对所提供的页面结构没有太多了解,但作为一个广泛的猜测,我会说我会为此结合 jQuery 和 ASP.NET --使用 jQuery 跟踪滚动,将其写入 .NET 输入隐藏字段,然后在页面重新加载时重新应用它。

您可能需要对其进行调整以适应您实际文档的需要,但我正在考虑这些方面的一些东西。 (注意:如果您想在 页面 内滚动,而不是在特定 div 内滚动,请参阅本答案末尾的注释。)

首先,对于主 div,我假设你有类似的东西:

<div id="container" style="overflow-y:auto;">

...这样 div 的内容可以垂直滚动。使用该假设,下一个添加将是页面中的隐藏字段:

<asp:HiddenField ID="tScroll" runat="server" value="0" />

页面首次加载时默认为 0。最后,您使用 jQuery 来跟踪滚动位置,并在重新加载页面并触发文档准备步骤时重新应用跟踪的滚动位置:

$(document).ready(function() {
    $("#container").scrollTop($("#tScroll").val()); // this sets the scroll position
    $("#container").scroll(function() {
        $("#tScroll").val($(this).scrollTop());
    });
});

但是,如果 div 和 table 在页面加载时可见,您会在 div 最初出现在其正常位置,然后跳转到滚动位置时出现瞬间抖动.相反,您可以使用 jQuery animate 函数执行平滑向后滚动,并将该行替换为:

$("#container").animate({ scrollTop: $("#tScroll").val() + 'px' }, 500);

...根据需要将 500 调整为更大或更小。这样,div 会自动滚动回您需要的位置。

我无法判断这是否完全符合您的需求,但希望它至少可以为您指明正确的方向。

对此的补充:如果您希望维护 page 滚动,而不是特定 div 中的滚动,则逻辑是相同的,但您需要跟踪和引用几个不同的值,基本上如下:

$('html,body').animate({ scrollTop: $("#tScroll").val() }, 500);
$(window).scroll(function(e) { 
    ...

...与脚本的其余部分保持在同一行。无论哪种情况,您都可以选择是使用动画还是直接滚动顶部分配。

【讨论】:

  • 不得不修改它以使用 ScrollLeft 水平滚动,但逻辑是完美的。谢谢一百万!
猜你喜欢
  • 2011-10-14
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多