【问题标题】:Is there a way to force page position on a website that has an update panel that refreshes every 15 seconds?有没有办法在具有每 15 秒刷新一次的更新面板的网站上强制页面位置?
【发布时间】:2017-01-05 14:14:57
【问题描述】:

我有一个 Web 控件,它是用户填写的长表单。一路上有很多检查,很多滚动和很多回发。

对于每个按钮单击或回发操作(单选、下拉更改),我在后面的代码中使用它:

 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 秒刷新一次以获取任何新指纹。基本上发生的情况是,用户将在表单下方很好地捕获数据,当间隔开始时,面板被更新并且屏幕被定位回顶部(顺便说一句,这是更新面板所在的位置)。它从链接到该站点的 Web 服务中读取数据。

现在这至少可以说是令人沮丧的。用户抱怨屏幕一直在跳动。

我有

Page.MaintainScrollPositionOnPostBack = True

它需要的任何地方,但这并不能阻止更新面板接管。

我想使用锚点,但这不适用于我们的网站结构。

还有什么我可以尝试的吗?我希望更新面板继续正常更新,每 15 秒一次,而不是每次都重新定位屏幕。

这可以在 Javascript 中完成吗?后面的代码?像改变表单本身这样简单的事情?

编辑

这是在该控件本身上:

<asp:Timer ID="timerTid" runat="server" Interval="1500" OnTick="timerTid_Tick">

在用户使用或未使用此功能后,我可以在代码中设置时间间隔吗?

【问题讨论】:

    标签: asp.net vb.net updatepanel


    【解决方案1】:

    最好的办法是只更新需要的内容。但我认为还有其他选择。您可以尝试使用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>
    

    如果将新记录添加到网格顶部,您可能会遇到问题。

    【讨论】:

      【解决方案2】:

      通过将其添加到我的 ScriptManager 来解决我的问题

      LoadScriptsBeforeUI="true"
      

      这会加载所有脚本,因此控件会获取数据并刷新,但不会进行所有滚动。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-22
        • 1970-01-01
        • 2016-03-10
        • 2016-01-11
        • 2013-08-26
        相关资源
        最近更新 更多