很明顯的,ScriptManager 和 UpdatePanel 是ASP.NET AJAX中最重要的2個類。
用Reflector查看Microsoft.Web.Extensions.dll 里的類時,發現有很多個接口,譬如象IHtmlForm,IHttpBrowserCapabilities,IHttpCachePolicy,IHttpContext,IHttpRequest,IHttpResponse,IPage等,封裝了System.Web里對應類的某些方法,還有對應的一些Wrapper類,譬如HtmlFormWrapper ,HttpBrowserCapabilitiesWrapper,HttpCachePolicyWrapper,HttpContextWrapper,HttpRequestWrapper,HttpResponseWrapper,PageWrapper等,使用System.Web里對應類的對象實現了上面這些接口的方法。看上去,下一個版本ASP.NET將會有很多重構!
仔細看了一下 ScriptManager 類的實現,發現很多一些功能都被抽象出來, 封裝在 PageRequestManager 類(客戶端有一個同名的類)里。
頁面起始的GET大概的流程如下:
局部更新的POSTBACK大概的流程如下:
其中 PageRequestManager 類在 IsAsyncPostBackRequest() 方法中通過分析 Headers 中“Pragma”的值是否是 “Deltea=true” 來決定是否是局部更新模式。然后在執行 ScriptManager 的 LoadPostData() 中找出哪個 UpdatePanel 需要更新以及是由哪個元素造成的 PostBack,記住在前面說過,在局部更新時,類似”ScriptManager1=UpdatePanel1|btnUpdate&....“ 這樣的數據被提交到服務器端了。然后在執行 ScriptManager 的 OnPreRender() 時,PageRequestManager 類調用了 Page 類的 SetRenderMethodDelegate(),通過設置一個 RenderMethod,實際上 PageRequestManager 類接管了顯示輸出的邏輯。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
