花了一個月課餘的時間算是把asp.net的基本的東西都搞定了,感覺有點快了,還是回頭好好在整理下基礎知識。
一開始或許我們馬上就接觸到了.aspx的通用尾碼的檔案,於是我們很自然的就在這裡面開始寫代碼,開始都不知道為什麼要這麼寫,寫的不亦樂乎,於是就開始入門了,新學的同學可以和我一起複習一下。
單檔案模型
當我們在後面遇到MVC或者用webForm的<%=###%>類比MVC效果的時候,我們是否有這樣的疑問,就是我們在可以在前台調用後台代碼的傳回值什麼的,於是有些人開始這麼實驗<% for(int i=0;i<100;i++){########}%>結果的確可以正常執行,於是我們知道了,<%%>很好很強大,但是好像還是沒勁,這麼寫個傳回值可以,但是寫一段代碼,後台還有個cs檔案顯擺著不用,這不是脫褲子放屁多此一舉嗎,於是我們追本溯源,找到了一種最原始的方式。我們只需要建立一個HTML頁面,把尾碼改成aspx就OK了。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> 2 <head> 3 <title>單檔案模式</title> 4 </head> 5 <body> 6 <form runat="server" action=""> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 7 <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 8 </form> 9 <script runat="server" language="C#">10 protected void Button1_Click (object sender,EventArgs e)11 {12 Label1.Text="單檔案模式";13 }14 </script>15 </body>16 </html>
結果我們在瀏覽器中運行,其中我們把html代碼和C#代碼混合在一個頁面裡面使用(<script runat="server" language="C#">),這麼看上去感覺一一對應貌似很美觀,但是只要代碼量一上去,夠人頭痛,還不好維護,所以這裡舉這
麼個例子只是告訴新學習的同學,有這麼回事,但是實用性其實不高。
後台代碼模型
這種就不多提了因為是大家都在用的模型,唯一值得提的就是那個被人忽視編譯指令,由於浮躁好多人直接使用也沒怎麼注意過,我們就以原始產生的指令為基礎解釋下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="backstageFile.aspx.cs" Inherits="backstageFile" %>CodeFile 後台代碼 Inherits 後台代碼中定義的類名 AutoEventWireup 指示頁面的事件是否自動匹配
當然我們也可以看出aspx和html尾碼的直接區別,就是aspx頁面可以繼承自後台,於是我們可以知道aspx最終編譯成的還是
類。
總結:對比這兩種模式
- ***.aspx單檔案模型被.NET運行時編譯成***_aspx類(繼承自System.Web.UIPage類)。
- ***.aspx 後台代碼模型最終也被.NET運行時編譯成***_aspx類(繼承自System.Web.UIPage類,***.aspx.cs檔案用於定義Web控制項的一些程式碼片段【這部分還是從***.aspx中提取的所有Web控制項和事件】)。
應用程式檔案夾
我們很熟悉各個語言類庫和運行架構都定義了自己的保留字和關鍵字,那麼對已一個類似asp.net的這個用於Web開發的架構來說,設定自己的某些特定的保留或者關鍵格式的類型是否很有必要,於是出現了應用程式檔案夾這個概念,當然我們可以把它當做是保留(關鍵)檔案夾,這些檔案夾既然是保留類型的,就是說我們不可以隨便重新命名,否則到時候不是系統崩潰就是你崩潰,那麼應用程式檔案夾有哪些?
App_Browsers |
包含 ASP.NET 用於標識個別瀏覽器並確定其功能的瀏覽器定義 (.browser) 檔案。有關更多資訊,請參見 瀏覽器定義檔案架構(browsers 元素) 和 如何:在 ASP.NET 網頁中刪除瀏覽器類型和瀏覽器功能。 |
App_Code |
包含您希望作為應用程式一部分進行編譯的工具 + 生產力類和業務對象(例如 .cs、.vb 和 .jsl 檔案)的原始碼。在動態編譯的應用程式中,當對應用程式發出首次請求時,ASP.NET 編譯 App_Code 檔案夾中的代碼。然後在檢測到任何更改時重新編譯該檔案夾中的項。 說明可以在 App_Code 檔案夾中放置任意檔案類型以建立強型別對象。例如,將 Web 服務檔案(.wsdl 和 .xsd 檔案)放置在 App_Code 檔案夾可以建立強型別的代理。在應用程式中將自動引用 App_Code 檔案夾中的代碼。此外,App_Code 檔案夾可以包含需要在運行時編譯的檔案的子目錄。有關更多資訊,請參見 ASP.NET 網站中的共用代碼檔案夾 和 compilation 的 codeSubDirectories 元素(ASP.NET 設定架構)。 |
App_Data |
包含應用程式資料檔案,包括 MDF 檔案、XML 檔案和其他資料存放區檔案。ASP.NET 2.0 使用 App_Data 檔案夾來儲存應用程式的本機資料庫,該資料庫可用於維護成員資格和角色資訊。有關更多資訊,請參見 成員資格介紹 和 瞭解角色管理。 |
App_GlobalResources |
包含編譯到具有全域範圍的程式集中的資源(.resx 和 .resources 檔案)。App_GlobalResources 檔案夾中的資源是強型別的,可以通過編程方式進行訪問。有關更多資訊,請參見 ASP.NET 網頁資源概述。 |
App_LocalResources |
包含與應用程式中的特定頁、使用者控制項或主版頁面關聯的資源(.resx 和 .resources 檔案)。有關更多資訊,請參見 ASP.NET 網頁資源概述。 |
App_Themes |
包含用於定義 ASP.NET 網頁和控制面板的檔案集合(.skin 和 .css 檔案以及影像檔和一般資源)。有關更多資訊,請參見 ASP.NET 主題和外觀。 |
App_WebReferences |
包含用於定義在應用程式中使用的 Web 參考的引用協定檔案(.wsdl 檔案)、架構(.xsd 檔案)和發現文檔檔案(.disco 和 .discomap 檔案)。有關產生 XML Web Services 的代碼的更多資訊,請參見 Web Services Description Language Tool (Wsdl.exe)。 |
Bin |
包含您要在應用程式中引用的控制項、組件或其他代碼的已編譯器集(.DLL 檔案)。在應用程式中將自動引用 Bin 檔案夾中的代碼所表示的任何類。有關更多資訊,請參見 ASP.NET 網站中的共用代碼檔案夾。 |
動態編譯與先行編譯
例如我們在一個解決方案中建立了一個網站或者Web應用程式,用些人還在討論他們的編譯形式,有人說web應用程式必須要產生一次後在執行,於是我們自己實驗了一下,結果完全扯淡,只要一個網站或者Web應用程式不依賴於外部程式集(例如三層架構產生的**.DLL),這個時候完全是動態編譯的,也就是說它是在我們瀏覽頁面的時候用運行時自動編譯,同時第一次編譯以後就會存在緩衝中,之後如果不修改檔案就不需要再次編譯,否則自動重新編譯。或許你有疑問既然它編譯成程式集後怎麼和頁面聯絡在一起,我們只要按圖索驥,C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\你就會發現好多你從前建立過得程式的編譯後的程式集,我們開啟一個含有WebSite編譯後的程式集的檔案夾,找到尾碼***.compiled的檔案,開啟一看你就恍然大悟了,這裡就不示範了,自己開啟看看就明白了.
而先行編譯實在我們通常發布網站或者一個網站或者Web應用程式依賴於外部程式集是,“預”一下,預者就是提前的意思,就是必須先產生一下,當然你必須注意一下,每次產生的程式的檔案名稱都是隨機產生的,而不是固定不變的。