簡體   English   中英

updatepanel與頁面方法

[英]updatepanel vs page methods

我一直在使用update panels ,當我想要更新我的頁面的特定部分但最近我遇到性能問題(我的意思是它渲染預期的控件很慢,有時它不起作用,需要多次點擊工作!

所以我的問題是:

  • 頁面方法是否可以被視為更新面板的有效替代方案並執行ajax魔術?
  • 還有什么其他選擇?

請盡可能一個簡單的例子來闡明如何使用頁面方法替換更新面板?

幾年前我曾經像你一樣,我曾經使用UpdatePanel 獲得性能,錯誤的想法我正在提高我的應用程序的性能 ......

我完全錯了, UpdatePanel是所有UI邪惡的根源,首先它隱藏了使用AJAX的復雜性,這讓我們大多數人都很容易,讓我們錯誤地認為我們正在創建響應式應用程序,這是最糟糕的比如我們根本不使用它(這是我以前在我所有頁面中使用它的主要原因,我確信這就是許多開發人員使用它的原因......因為它很容易)。

請考慮以下文章:

當您了解UpdatePanel對簡單調用PageMethod或REST WCF服務的真正作用時,您將看到它們之間的巨大差異。

  • UpdatePanel 當您從UpdatePanel執行帖子時,必須執行整個頁面生命周期,這意味着,它需要在每個帖子上發送所有頁面ViewState,當您的頁面增加復雜的幾個控件時,ViewState肯定會巨大的,這肯定會是一個性能問題。 使用它們只能獲得部分渲染 ,盡管您需要在每個請求上發送整個ViewState,但UpdatePanel的控件將在沒有完整回發的情況下呈現。

  • PageMethod 頁面方法是static ,它們被稱為如果它們是服務方法,它們不需要創建整個頁面生命周期以便執行,因此,它們執行得更快。

因此,使用PageMethods似乎是解決方案,問題是PageMethods通常用於返回JSON對象,這意味着您必須手動呈現這些對象。 這意味着如果你想要擺脫你所有的UpdatePanel你將不得不更改你的視圖中使用的控件,你將無法使用GridView開箱即用,相反,你會有為JQGrid (或類似物)改變它。

如果您正在創建MVC應用程序,這是很自然的,但對於傳統的ASP.Net,這並不簡單。

您還需要考慮一些非常重要的事情, 默認情況下會在每個帖子上驗證ViewState ,您可以將其關閉,但如果您想確保您的ViewState沒有被破壞,則不建議這樣做( 請看一下這個問題 ) 。

考慮這個例子,你有兩個DropDownList控件,(名為:ddl1,ddl2) ddl2依賴於ddl1,所以使用SelectedIndexChanged事件填充第二個下拉列表。 但是如果你嘗試使用AJAX調用(沒有UpdatePanel )來做同樣的事情,你將面臨兩個問題

  • 渲染時,您需要手動將對象添加到表示DropDownList的HTML select控件。 你可以使用第三方框架使用javascript綁定這些控件,我可以推薦你knockoutjs (它太棒了)

  • 這就是問題。 使用javascript更改了第二個DropDownList的內容后, 您無法對頁面進行簡單的發布,因為ViewState將無效 ,您將看到以下異常:

無效的回發或回調參數。

解決方法是指定哪些值在服務器端有效,為了做到這一點,您需要覆蓋頁面Render方法並指定第二個下拉列表中的每個值 ,但這會增加頁面大小和顯然,這不是一個好的選擇

看一看:

總而言之,如果您希望擺脫所有UpdatePanel控件,則需要替換現有的服務器控件以實現對javascript友好的控件。 另請注意,如果您這樣做,而不是依賴於頁面發布機制,則必須使用AJAX在服務器上執行操作,否則,您將獲得無效的回發或回調參數。 例外。 換句話說,如果可能的話,考慮轉移到MVC應用程序會更好。

您可能會閱讀.NET 4.5中即將發布的WebAPI。 它適用於WebForms以及MVC,如果你可以等待4.5,它可能是你問題的可行解決方案。

只需將它與任何jQuery模板引擎結合使用即可。

http://weblogs.asp.net/scottgu/archive/2012/02/23/asp-net-web-api-part-1.aspx

UpdatePanels有一個替代方案,但仍然使用PageMethods。 它是jQuery和jQuery模板的組合。 它被證明比UpdatePanel更快。 進一步閱讀下面的資源,在那里您可以找到更多專門討論該主題的文章。

http://encosia.com/use-jquery-and-aspnet-ajax-to-build-a-client-side-repeater/

暫無
暫無

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

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