是否有一种简单的方法如何发布ASP.NET AJAX请求(来自客户端)更新更新面板而不将整个页面从客户端发送到服务器(可能通过手动调用一些内部MS javascript启动异步更新请求)?< / p>
底色:
我们有非常简单的内部网页面,只显示某些状态(因此它不需要维护视图和控制状态)。它需要非常频繁地刷新(大约每秒一次)。
为了简单起见,我通过Timer和UpdatePanel实现了这一点:
<asp:Timer ID="Timer" runat="server" Interval="1000" />
<asp:UpdatePanel ID="UpdatePanel" runat="server" >
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer" EventName="Tick" />
</Triggers>
<ContentTemplate>
<%-- content here --%>
</ContentTemplate>
</asp:UpdatePanel>
这很有效,但是远程客户端更新速度较慢,有时会被堵塞&#39; (浏览器长时间加载页面)。
我通过从页面完全剥离视图和控制状态(覆盖页面类并停止存储到viewstate元素)并主要通过配置IIS动态内容压缩来解决这个问题。这解决了大部分问题 - 从服务器到客户端的使用带宽迅速下降(因此更新速度更快)。
从客户端到服务器的流量仍然很大 - 因为基本上客户端将页面发送回服务器;并且它也发送它未压缩。我们不需要处理任何控制事件或状态更改 - 因此我们不需要服务器上的页面。
我有任何选择如何向服务器发送快速AJAX请求以请求UpdatePanel更新(可能我需要调用一些启动异步请求的MS内部javascript方法 - 我只是不知道如何查找它并称之为。)
答案 0 :(得分:1)
您可以使用updatepanel的id作为第一个参数(eventtarget)从您的javascript调用__doPostBack函数。 例如:
<div id="somediv" onclick="__doPostBack('<%=UpdatePanel.ClientID%>)', '');">
这应该触发“部分回发”,并且只应刷新更新面板......这是什么意思? 第二个参数是eventargument。您可以像这样获得此服务器端:
Request.Params.Get("__EVENTARGUMENT");
答案 1 :(得分:0)
<asp:Timer ID="Timer" runat="server" Interval="1000" />
<asp:UpdatePanel ID="UpdatePanel" runat="server" updatemode="conditional" >
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer" EventName="Tick" />
</Triggers>
<ContentTemplate>
<%-- content here --%>
</ContentTemplate>
</asp:UpdatePanel>
我只是在更新面板中提供updatemode="conditional"
,仅更新udate面板