天天看點

Ext.Net學習筆記07:Ext.Net DirectMethods用法詳解

前面兩篇内容中,我們看到了DirectEvents友善調用伺服器端方法、DirectEvents調用WebService方法的使用方法,今天我們來看看DirectMethods,這家夥可比DirectEvents更加靈活了,它可以像調用JS方法一樣來異步調用伺服器端的方法。

我承認,這個标題有點噱頭,其實應該是通過DirectMethods,在JS中通過異步調用的方式執行伺服器端的方法。

來看一個例子吧:

這是一個aspx頁面中的伺服器端方法,為了能夠在JS中來調用,必須添加DirectMethod特性。

接下來讓我們看看JS調用:

就是這句話,它被定義在命名空間App.direct下,當然,這個命名空間是可以修改的,我會在接下來告訴你怎麼修改。

然後添加一個按鈕,在點選按鈕的時候來執行fnUpdate方法。

我們這裡使用的是Ext.Net按鈕,你還可以使用Asp.Net按鈕,或者是Html按鈕,不再細說。

然後我們編譯代碼,重新整理頁面,點選這個按鈕吧,你會看到window中的顯示:

預設情況下,DirectMethods的命名空間是App.direct,我們可以通過N中方法來改變這個預設的命名空間:

directMethodNamespace="MyApp.DirectMethods

這種更改方式是在web.config中完成的,如果你不知道怎麼在web.config中添加extnet配置節點,那麼你肯定是沒有看我的第一篇筆記,去看看吧>>在ASP.NET WebForm中使用Ext.Net

這種更改方式将對所有頁面有效。

這種更改方式是在頁面中完成的,它隻對目前頁面有效,當然了,它肯定是要覆寫全局的設定的。

這是最後一種設定方式,它更加靈活,它可以更改某一個方法的命名空間。

[DirectMethod(Namespace = "MyApp.DirectMethods"

這種方法隻對設定的方法有用,它将會覆寫頁面和全局的配置。

前面提到過,Ext.Net DirectMethods和DirectEvents類似,都是通過JS實作的異步調用,是以,如果要處理伺服器端的執行結構,就必須在JS中添加相應的回調方法。

在這段代碼中,我們在調用DirectMethod方法的時候添加了一些配置,包括執行成功和失敗的回調方法,以及來顯示一個遮罩層。

一般情況下我們都是采用異步的方式來執行伺服器端的方法,這樣能夠獲得更好的使用者體驗,當然,如果你有怪癖,希望能夠通過同步的方式來執行伺服器端方法,Ext.Net DirectMethods也是支援的。

很簡單的一個設定,在DirectMethod構造函數中配置一下就可以了。

鄭重的提醒,盡量少用同步的請求,這樣會造成浏覽器假死的現象,至于什麼是浏覽器假死,你去試試搶一下春運時候的火車票就知道了(這裡說的是2014年春運的火車票,今天是2014年1月16日,目前12306的驗證碼校驗用的就是同步請求,不知道有多少同學被卡死在校驗驗證碼的路上……)

先來說說非靜态方法,在執行非靜态方法的時候,Ext.Net會送出更多的資料,使我們可以通路頁面中的控件這在處理頁面相關内容時候非常有用,但是當我們隻是想去執行一個處理過程,而與頁面無關的時候,我們就可以通過執行靜态方法來提升性能。

在靜态方法中,我們不能通路頁面的Form資料,不能直接通路Request、Response等資料(可以通過HttpContext.Current來通路),好處是在請求的時候,Ext.Net不會将頁面資料送出給伺服器,大大減少了資料傳輸和伺服器執行的時間。

這是我們剛才的方法,現在把它改成了靜态方法。JS的調用基本沒有改變,隻不過我們需要在JS中來更新控件的顯示了。

我們需要對onSuccess回調方法進行修改,在它接收到執行結果之後更新界面顯示。

DirectMethods不能直接通路WebService,但可以通過Ext.net.DirectMethod.request來請求WebService,實作類似于頁面背景方法的效果。

這是方法的調用過程,不再示範了。

附加說明:這種方法受用于一切WebService、一般處理程式、MVC等通過url通路的東東,非常好用。

這是一個大問題,一般情況下,如果你想偷懶,Ext.Net預設已經幫我們進行了異常處理。當然,如果你想更友好的給使用者進行提示,那就來手動處理吧。

這樣一來,我們手動的判斷是否執行成功。當然,你還可以這樣寫:

ResourceManager.AjaxSuccess = false

OK,Ext.Net DirectMethods的用法就介紹這麼多,希望可以幫到你們。

2021年9月 北京、西安兩地,高薪誠聘 .NET工程師,請私信聯系!

如果認為此文對您有幫助,别忘了支援一下哦!

聲明:本部落格原創文字隻代表本人工作中在某一時間内總結的觀點或結論,與本人所在機關沒有直接利益關系。轉載時請在文章頁面明顯位置給出原文連結。