簡體   English   中英

請求ASP.NET頁面異步(ajax)更新,而無需將整個頁面發送到服務器

[英]Request ASP.NET page async (ajax) update without send whole page to server

有沒有一種簡單的方法如何(從客戶端)發出ASP.NET AJAX請求來更新更新面板,而不將整個頁面從客戶端發送到服務器(可能是通過手動調用一些內部MS javascript啟動異步更新請求)?

底色:

我們有一個非常簡單的Intranet頁面,它僅顯示某些狀態(因此它不需要維護視圖和控件狀態)。 它需要非常頻繁地刷新(大約每秒刷新一次)。

為簡單起見,我通過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>

這很好用,但是遠程客戶端更新速度較慢,有時會“阻塞”(瀏覽器長時間加載頁面)。

我通過完全剝離頁面中的視圖和控件狀態(重寫Page類並停止存儲到viewstate元素中)並主要通過配置IIS動態內容壓縮來部分解決此問題。 這解決了大多數問題-服務器到客戶端的已用帶寬迅速下降(因此更新速度更快)。

客戶端到服務器之間仍然有相當多的流量-因為基本上客戶端將頁面發送回服務器; 並且也將其發送為未壓縮狀態。 我們不需要處理任何控制事件或狀態更改-因此我們不需要服務器上的頁面。

我是否有任何選擇如何僅向服務器發送快速AJAX請求以請求UpdatePanel更新(可能我需要調用一些MS內部javascript方法來啟動異步請求-我只是不知道如何找到並調用它) 。

您可以通過javascript調用__doPostBack函數,並將updatepanel的ID作為第一個參數(eventtarget)。 例:

<div id="somediv" onclick="__doPostBack('<%=UpdatePanel.ClientID%>)', '');">

這應該觸發“部分回發”,並且應該只刷新updatepanel ...這是您的意思嗎? 第二個參數是事件參數。 您可以像這樣獲得該服務器端:

Request.Params.Get("__EVENTARGUMENT");
<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面板

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM