2012-08-28 21 views
0

我有我的ASP.Net 4.0/C#應用程序中的250行和4列的列表視圖。渲染頁面大小(來自Trace)是650,000字節。整個列表視圖位於更新面板中。我怎樣纔能有最小的數據來回AJAX啓用GridView

listview方便了對listview記錄的查看/添加/編輯/刪除操作。

每個POSTBACK操作(即編輯點擊,刪除點擊)都會導致大小爲112,000字節的POSTBACK請求和大約650,000字節的AJAX響應。

listview從頁面上的聲明性數據源(SQLDataSource)獲取數據。而且每次往返都會綁定列表視圖。

我想減少每次調用中的數據,因爲在連接速度較慢時,這些AJAX調用需要2-3分鐘才能完成。

我曾嘗試 - 刪除整個列表視圖更新面板,並添加了每次更新面板:

  • 的ItemTemplate內容
  • AlternateItem模板內容
  • 編輯模板內容
  • 插入模板內容

我當時希望用t他在每一行都有模板,所以會減小AJAX響應的大小,因爲只有更新面板的HTML纔會返回。不幸的是,它似乎並沒有這樣工作。

關於我的問題如何解決問題的任何輸入?

在此先感謝您的查看。

+0

你需要顯示所有250行嗎?添加分頁應該大大減少通過線路發送的數據。 – Lester

+0

尋呼是顯而易見的出路,但由於要求,我們需要在頁面上保持所有250行可見。 –

回答

1

UpdatePanel的問題在於您沒有使用真正的AJAX。相反,ASP.NET使用一些非常聰明的黑客來創建部分頁面更新的幻想。在後臺執行整個頁面生命週期。這也意味着您的完整ViewState來回發送。

如果您想要更快的體驗,則不應使用UpdatePanel。相反,使用純HTML控件(最好不要連服務器控件),並使用JavaScript和服務器端Web服務(例如WebAPI或WCF服務)來響應客戶端請求。

這些請求和響應將只包含一些JSON數據並且沒有標記。您的數據可以保持在最低限度。例如,如果用戶刪除一行,則只需將該行的標識發送給您的服務,它將返回成功或失敗。客戶端將使用JavaScript,可能類似於KnockoutJS來呈現結果。這將爲您提供最小的開銷和更好的性能。

+0

謝謝。你的建議絕對是一個正確的方向。儘管這次由於時間限制我們沒有實現它,但已經注意到這個解決方案將來的增強。 –

1

儘可能最好的方式做到這一點是不使用ASP.NET用戶控件和此清潔使用JavaScript,JSON,HTML和服務器端Web服務/ HTTP處理程序

這樣,你不」,而不是做不得不從服務器向客戶發送大的HTML響應。您還可以控制何時需要刷新和重新綁定數據。

0

我敢打賭,整個尺寸問題必須做ViewState。原因是在每次回傳時,即使它是AJAX回傳,ViewState也會隨着每個回覆請求。你可以做的唯一一件事就是在IIS端啓用壓縮功能。這至少會發送壓縮的響應,瀏覽器會負責解壓縮。

最好的方法是根本不使用UpdatePanelScriptManagers,而是通過調用WCF Web服務使用jQuery(或您喜歡的任何框架)發出AJAX請求。這不會觸發整個頁面的生命週期,並且不會在每個請求上發送ViewState

+0

感謝您的回覆,我感謝您的洞察力。但在我的情況下,我已經檢查了視圖狀態,並且它與HTML字節大小相比並不顯着。 –