我已经创建了一个中继器,现在我想每隔1分钟刷新一次该中继器。打击是我的代码:
<asp:Repeater ID="gvd" runat="server">
<ItemTemplate>
<tr class="gradeA">
<td>
<asp:Label ID="lblcategory" runat="server" Text='<%#Eval("Firstname")%>'></asp:Label>
</td>
<td>
<asp:Label ID="lblcontent" runat="server" Text='<%#Eval("Lastname")%>'></asp:Label>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
它提供了完美的输出,但是现在我想通过javascript刷新整个转发器,因为使用updatepanel会增加服务器的负载
所以我该如何通过javascript做到这一点?
创建SignalR是为了完全解决您正在描述的问题。
这是您的情况:您想要一种显示可能不断变化的信息的方法。无论何时,都应显示最新信息。
以Web窗体为中心的方法是使用UpdatePanel。但是我自己和其他一些人并不真的喜欢那些。它们通常会在以后产生问题,因为它们与其他技术的配合不好。它们也是“昂贵的”,它们在客户端和服务器之间来回发送大量数据,从而消耗带宽和资源。
deostroll涉及的另一种方法是使用AJAX定期轮询服务器以获取数据。这不是一个坏方法,尽管我不会像他那样实现它。他/她的方法将大量消耗带宽和资源,因为您每隔几秒钟就会重新创建整个表。归结为对话类型格式,他/她的方法如下所示:
Client -> Server - Send me the entire table.
Server -> Client - Here's a 1MB table.
Client -> Server - Send me the entire table.
Server -> Client - Here's an 1MB table.
Client -> Server - Send me the entire table.
Server -> Client - Here's a 1.5MB table.
Client -> Server - Send me the entire table.
Server -> Client - Here's a 1MB table.
相反,基于AJAX轮询的方法应如下所示:
3:30PM Client -> Server - The last data I have is from 3:30PM. Got anything new?
3:30PM Server -> Client - No.
3:31PM Client -> Server - The last data I have is from 3:30PM. Got anything new?
3:31PM Server -> Client - No.
3:32PM Client -> Server - The last data I have is from 3:31PM. Got anything new?
3:32PM Server -> Client - No.
3:33PM Client -> Server - The last data I have is from 3:32PM. Got anything new?
3:33PM Server -> Client - Yes, two new records. Here you go, 10KB.
3:34PM Client -> Server - The last data I have is from 3:33PM. Got anything new?
3:34PM Server -> Client - No.
那会占用更少的带宽。我不会费心地向您展示如何在代码中进行操作,尽管您知道它相对简单,并且相对于deostroll的方法而言是一个巨大的改进。
相反,我想描述基于SignalR的方法如何工作。SignalR是“实时”的。它利用了多种技术来“将”更改从服务器“推送”到客户端。一种用于实现此目的的技术称为Web套接字,这是首选方法。但是,如果客户端或服务器不支持Web套接字,则SignalR可以正常切换到其他技术。您不必担心,所有这些都为您服务。
让我们看一下在SignalR中实现此功能的简单方法。每次更改表数据时,您都希望在客户端上运行JavaScript函数,以使用最新数据更新它们。
首先,我们需要服务器上的集线器。
public class TableHub : Hub
{
}
在客户端,执行以下操作以关联事件:
$(function () {
var tableHub= $.connection.tableHub;
tableHub.client.tableChanged= function (html) {
//append the html markup to your DOM
};
});
然后,只要表数据发生更改,就在服务器上调用以下代码:
var context = GlobalHost.ConnectionManager.GetHubContext<TableHub >();
string html="<table><tr><td>Some data</td></tr></table>"; //obviously you'd built the HTML table up here
context.Clients.All.TableChanged(html); //call tableChanged() on the client!
这实际上最终tableChanged()
将以几乎实时的方式在客户端调用该函数,然后从服务器端启动它!这基本上是远程过程调用。因此,这不仅要考虑选择最佳的可用传输机制(Web袜子,服务器发送事件,长轮询),而且还要解析客户端功能,并允许您dynamics
在服务器端使用它们进行调用。
那是一个非常基本的例子。我们正在发送表格的整个HTML,这并不理想。但是,只需做一些工作,您就可以通知客户端何时进行API的AJAX调用,以仅检索已更改的表数据,而不是检索整个表。实际上,这是我在最近创建的网站上采用的一种方法,用于将新文章从服务器实时推送到客户端。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句