asp.net伺服器端指令include的使用及優勢介紹

來源:互聯網
上載者:User

asp.net中的服務端包括指令簡單點就是一個<!-- #include file|virtual="filename" –>這樣的指令,msdn中的名詞解釋是:將指定檔案的內容插入 ASP.NET 檔案中,包括網頁(.aspx 檔案)、使用者控制項檔案(.ascx 檔案)和 Global.asax 檔案。插入靜態檔案這個準系統就不說了,插入aspx、ascx,這功能算是挺強了,asax哥就有點困惑了,這個暫且不管,今天要說的就是這個指令。

尷尬的存在
伺服器端包括指令在web的開發技術中肯定是個標配了。asp.net前身asp中就已經有了這個指令,做為唯一一個引用外部檔案的指令,入門的開發人員都應該使用過;php中的include、require,幾乎用濫了,曾經使用過一段php,這指令常用的不能再常用了;jsp沒過開發經驗,搜尋了下,也有這個include指令,使用方式應該也很平常。但是asp.net中的include幾乎是在被遺忘的角落裡,讀過的asp.net的書裡,很少會提到它。因此,對於沒有asp開發經驗直接學習asp.net的來說,可能要本不知道它的存在。為什嗎??

造成尷尬存在原因之一,就是webform中最重要的功能之一:使用者控制項。為什麼要使用include,是因為被引用的內容會在很多地方被使用到--重用,例如頁頭、頁尾、網站功能塊。而恰恰使用者控制項就是為此而生,它天生可重用的特性,及強大的控制項事件流程,就如MSDN中所說:
“儘管您仍然可以使用 #include 標記(通過將公用伺服器端代碼、控制項或 HTML 標籤放入要包括在其他網頁中的檔案內)以實現代碼重用,ASP.NET 常用的首選方法是使用 Web 使用者控制項。使用者控制項提供了一個物件導向的編程模型,並且提供了比伺服器端包含檔案更多的功能。”
微軟都不待見它了,緊接著,include也被開發人員打入冷宮,但是,請不要忘記,它存在。

include詳解
說是詳解,其實不打算在這裡詳解,請參見:伺服器端包括指令文法。文法、用法、樣本什麼的,這裡也不說,大家自己去看或自己實驗吧。

include優勢
說到優勢,肯定要有個比較的對象了,對了,這個對象就是使用者控制項。使用者控制項是啥玩意,不解釋。

優勢之一:靜態檔案的重用。

使用者控制項功能強大,但是即使是簡單如靜態內容以使用者控制項的形式實現,它也必須經曆使用者控制項的生命週期,相比效能就差了。

你可能會說,現如今網站又有多少還能是純靜態內容呢,譬如頁尾,那些項肯定也是網站CMS後台管理的,怎麼可能以靜態檔案的形式存在,只能使用使用者控制項,並且給使用者控制項加上outputcache,這樣即保證了靈活性,效能也能有保證,這樣才是最完美的。

不錯,第一,不同的項目不同的需求,肯定有些時候就是會引用靜態內容,這時要保證使用這些靜態內容以靜態形式存在,不要放到使用者控制項裡。第二,網站的最佳化,無論何時,總有一種觀點,就是靜態化,例如上邊的頁尾,我們可以通過產生一個靜態頁尾檔案,當CMS對這些項有修改時,重建這個檔案,然後通過include方式引用,相對於緩衝的不可預測性和一定的不可控性,優勢比使用者控制項還要靈活,並且效能更好。第三,協作,就是對於比較大型的網站,頁面某些控制項,但是這些資料是其它團隊負責的,而一些相對穩定的內容或者對變化不太敏感的內容,產生靜態檔案之後自動分發,而對於這些檔案的引用也是很常見的。

其實這個也可能是唯一的include的優勢了。

優勢之二,可穿透的封裝。

可重用的東西一般都是封裝的。使用者控制項是一個獨立的個體,它寄宿於頁面,但本身卻像是頁面上一個自由王國,碰到王國內部的處理,頁面會把處理權交給控制項自己的去處理,例如頁面page_load載入時,碰到控制項只能調用控制項提供的load處理方法,這就是控制項的封裝,只有自身願意公開的屬性和方法才能被頁面訪問,這是標準的封裝,這也是由asp.net的頁面生命週期決定的。因此,如果控制項要使用寄宿頁面的一個變數,那麼它應該公開一個屬性,然後由頁面在代碼裡主動給它賦值。

同樣的,不同的機制決定了不同的行為。從MSDN中:

賦予 File 或 Virtual 特性的值必須用引號 ("") 括起來。在執行任何動態代碼之前處理被包含的檔案。

重要的一句,在執行任何動態代碼之前處理被包含的檔案。這句話什麼意思??

一層意思就是說被包含檔案在被處理之後內容才會加入到頁面中,動態代碼執行時,執行的代碼根本就區分不出來這塊內容是引用的還是自己本來就有的,也就是說我們可以用來重用的靜態檔案裡加入<% 代碼 %> 或者<%= 頁面變數 %> 這樣的代碼,它們會被頁面處理為相應的內容。這就是我所謂的“可穿透的封裝”。這種方法當然比控制項公開屬性,頁面主動賦值要更靈活。

二層意思如果引用的aspx或ascx,那麼會在引用的動態內容執行輸出之後,頁面代碼才會執行,這樣就不如使用者控制項調用將流程在頁面內好了,盡量不要使用include引用動態網頁面。

因此我們應只用include引用靜態檔案,但是靜態檔案裡可以包含服務端標記代碼。

知無不言,但怎奈能力有限,詞不達意,就當拋磚引玉吧。大家盡量看,不過可以肯定的是可以以靜態檔案存在的重用就用include吧。可能還會有其它更適合的使用情境和更多的優勢,還請有充分經驗的補充。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.