有没有一种方法可以在具有每 15 秒刷新一次的更新面板的网站上强制页面位置?
Is there a way to force page position on a website that has an update panel that refreshes every 15 seconds?
我有一个 Web 控件,它是一个用户填写的长表单。一路上有很多检查,很多滚动和很多回发。
对于每个按钮点击或回发操作(单选select,下拉列表更改),我在后面的代码中使用它:
Page.MaintainScrollPositionOnPostBack = True
按预期工作。它会滚动回调用它的那个按钮或事件。
但是,在 Web 控件上,有一个更新面板:
<asp:PlaceHolder runat="server" ID="plFingerprint" Visible="false">
<tr>
<td colspan="2" class="l">
<asp:UpdatePanel ID="updatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<uc1:Listener id="tidListener" runat="server" />
<a href="FingerBio:match,--=7392=--,<%= tidListener.SessionID.ToString() %>,<%= ReplyIndex.BaseSiteUrl %>">
<img id="Img1" runat="server" src="~/images/finger.png" class="scan"
alt="Scan Finger" /></a>
<asp:Label ID="matchlabel" runat="server"></asp:Label>
<div style="display: none">
<asp:Label ID="matchIDLabel" runat="server"></asp:Label></div>
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
</asp:PlaceHolder>
这本质上是一个指纹扫描仪,每 15 秒刷新一次以捕获任何新的指纹。基本上发生的是,用户将在表单下方很好地捕获数据,当间隔开始时,面板会更新并且屏幕会回到顶部(这是更新面板位于 BTW 的位置)。它从链接到站点的 Web 服务读取数据。
现在至少可以说这是令人沮丧的。用户抱怨屏幕一直在跳动。
我有
Page.MaintainScrollPositionOnPostBack = True
它需要的任何地方,但这并不能阻止更新面板接管。
我想使用锚点,但这不适用于我们的网站结构。
还有什么我可以尝试的吗?我希望更新面板继续正常更新,每 15 秒一次,而不是每次都重新定位屏幕。
这可以在 Javascript 中完成吗?背后的代码?像更改表单本身一样简单?
编辑
这是在该控件本身上:
<asp:Timer ID="timerTid" runat="server" Interval="1500" OnTick="timerTid_Tick">
我可以在代码中设置时间间隔,在用户使用或未使用此功能之后吗?
最好只更新需要的内容。但我认为还有另一种选择。您可以尝试使用 Sys.WebForms.PageRequestManager.getInstance。当 UpdatePanel 有更新时调用哪些 js 函数。我没怎么用过,我觉得应该是这样的。
<script type="text/javascript" language="javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args)
{
// Get current scroll position
}
function EndRequestHandler(sender, args)
{
// Set scroll position back to where it was
}
</script>
如果将新记录添加到网格顶部,您可能会遇到问题。
通过将此添加到我的 ScriptManager 设法解决了我的问题
LoadScriptsBeforeUI="true"
这会加载所有脚本,因此控件会获取数据并刷新,但不会进行所有滚动。
我有一个 Web 控件,它是一个用户填写的长表单。一路上有很多检查,很多滚动和很多回发。
对于每个按钮点击或回发操作(单选select,下拉列表更改),我在后面的代码中使用它:
Page.MaintainScrollPositionOnPostBack = True
按预期工作。它会滚动回调用它的那个按钮或事件。 但是,在 Web 控件上,有一个更新面板:
<asp:PlaceHolder runat="server" ID="plFingerprint" Visible="false">
<tr>
<td colspan="2" class="l">
<asp:UpdatePanel ID="updatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<uc1:Listener id="tidListener" runat="server" />
<a href="FingerBio:match,--=7392=--,<%= tidListener.SessionID.ToString() %>,<%= ReplyIndex.BaseSiteUrl %>">
<img id="Img1" runat="server" src="~/images/finger.png" class="scan"
alt="Scan Finger" /></a>
<asp:Label ID="matchlabel" runat="server"></asp:Label>
<div style="display: none">
<asp:Label ID="matchIDLabel" runat="server"></asp:Label></div>
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
</asp:PlaceHolder>
这本质上是一个指纹扫描仪,每 15 秒刷新一次以捕获任何新的指纹。基本上发生的是,用户将在表单下方很好地捕获数据,当间隔开始时,面板会更新并且屏幕会回到顶部(这是更新面板位于 BTW 的位置)。它从链接到站点的 Web 服务读取数据。
现在至少可以说这是令人沮丧的。用户抱怨屏幕一直在跳动。
我有
Page.MaintainScrollPositionOnPostBack = True
它需要的任何地方,但这并不能阻止更新面板接管。
我想使用锚点,但这不适用于我们的网站结构。
还有什么我可以尝试的吗?我希望更新面板继续正常更新,每 15 秒一次,而不是每次都重新定位屏幕。
这可以在 Javascript 中完成吗?背后的代码?像更改表单本身一样简单?
编辑
这是在该控件本身上:
<asp:Timer ID="timerTid" runat="server" Interval="1500" OnTick="timerTid_Tick">
我可以在代码中设置时间间隔,在用户使用或未使用此功能之后吗?
最好只更新需要的内容。但我认为还有另一种选择。您可以尝试使用 Sys.WebForms.PageRequestManager.getInstance。当 UpdatePanel 有更新时调用哪些 js 函数。我没怎么用过,我觉得应该是这样的。
<script type="text/javascript" language="javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args)
{
// Get current scroll position
}
function EndRequestHandler(sender, args)
{
// Set scroll position back to where it was
}
</script>
如果将新记录添加到网格顶部,您可能会遇到问题。
通过将此添加到我的 ScriptManager 设法解决了我的问题
LoadScriptsBeforeUI="true"
这会加载所有脚本,因此控件会获取数据并刷新,但不会进行所有滚动。