[英]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.