请求ASP.NET页面异步(ajax)更新,而不将整个页面发送到服务器

时间:2014-06-20 06:26:18

标签: javascript asp.net ajax updatepanel

是否有一种简单的方法如何发布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方法 - 我只是不知道如何查找它并称之为。)

2 个答案:

答案 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面板