我正在构建一个具有“信息栏”的webapp,它跨越webapp的整个宽度。它位于DEFAULT.aspx页面中,因为我希望这个信息栏位于顶部并随时显示,无论最终用户在webapp中的哪个位置。这个信息栏将显示更新,状态和什么不是。 它的工作原理是读取数据库中的表格,拉出消息和样式(红色,黄色,绿色背景)。什么都没有报告,它就会消失。下面是它的样子。
在大多数情况下,这一切都很棒!我通过UI更新表。我的问题是这个。我希望infobar能够在没有最终用户点击F5的情况下进行更新(这会激活代码来提取数据)。因此,如果我更新表,那么每5分钟(或其他)运行一次的计时器会查看表中是否有值。如果是这样,抓住它并将其发布到屏幕上。更新仅在最终用户点击F5时有效。以下是我的HTML代码:
<div>
<asp:UpdatePanel ID="uppInfoBar" runat="server">
<ContentTemplate>
<asp:Timer id="tmrInfoBar" runat="server" Interval="30000" OnTick="tmrInfoBar_Tick" Enabled="true" />
<asp:Label runat="server" id="lblinfoBar" Visible="true" >
<div class="info-bar" >
<div class="info-bar__wrapper">
<i data-info-bar="icon"></i>
<span id="spnInfoBar" runat="server" data-info-bar="text"></span>
<asp:HiddenField ID="hdf_Test" runat="server"/>
</div>
</div>
</asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</div>
当我单步执行C#代码时,所有值都被正确拉出,但是在我的C#代码中的最后一个“}”之后的下一步,信息栏消失了。没有参数可以在项目的任何位置关闭它。如果我注释掉计时器,运行它,用新消息更新表,点击F5,更新的消息显示出来。
我该怎么做才能强制更新\刷新以使信息栏自行更新?我对其他如何实施的建议持开放态度。
谢谢!
有几种方法可以实现这一点,一种方法是在客户端使用javascript
并使用setInterval
每隔xx秒执行一次ajax
调用并获取任何新通知,使用更新的技术,您可以查看SignalR
以便您的服务器可以将消息推送到客户端,文档(https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/introduction-to-signalr)