待後期整理web
概覽:數據庫
文件夾名稱 | 文件類型 | 注 釋 |
Bin |
.dll |
包含應用程序所需的任何預生成的程序集 |
App_Browsers | .browser |
包含應用程序特有的瀏覽器定義文件,ASP.NET用它來識別各瀏覽器及肯定它們的功能 |
App_Code | .cs、.vb、.xsd、自定義的文件類型 |
包含做爲應用程序的一部分編譯的類的源文件。當頁面被請求時,ASP.NET編譯該文件夾中的代碼。該文件夾中的代碼在應用程序中自動地被引用 |
App_Data |
.mdb、.mdf、.xml | 包含Microsoft Office Access和SQL Express文件以及XML文件或其餘數據存儲 |
App_GlobalResources |
.resx | 包含在本地化應用程序中以編程方式使用的資源文件 |
App_LocalResources | .resx | 包含頁面範圍的資源文件 |
App_Themes | .skin、.CSS、.xsl、附屬文件 | 包含一組定義ASP.NET頁面和控件外觀的文件 |
App_WebReferences |
.wsdl | 包含用以生成代理類的WSDL文件,以及與在應用程序中使用Web服務有關的其餘文件 |
詳述編程
1. Bin文件夾瀏覽器
Bin文件夾包含應用程序所需的,用於控件、組件或者須要引用的任何其餘代碼的可部署程序集。該目錄中存在的任何.dll文 件將自動地連接到應用程序。若是在該文件夾中留有不用的或過時的文件,則可能出現「二義性引用(ambiguous reference)」異常的風險。換句話說,若是兩個不一樣的程序集定義相同的類(相同的命名空間和名稱),則ASP.NET運行庫不能決定應該使用哪一 個程序集,從而拋出一個異常。在開發時,當咱們從新命名一個項目或一個程序集的名稱時,這是常見的錯誤。爲了不這種錯誤,必定不要在該文件夾中保留任何 沒必要要的程序集,或者至少要從配置文件的<assemblies>節中刪除以下代碼行:安全
<add assembly="*" />服務器
在上表所列全部文件夾中,只有Bin能夠被ASP.NET 1.x應用程序識別。該文件夾是強制性的。架構
2. App_Browser文件夾模塊化
該可選的文件夾包含.browser文件。.browser文件描述瀏覽器(無論是移動設備瀏覽器,仍是臺式機瀏覽器)的特 徵和功能。ASP.NET在安裝路徑下的Config\Browser文件夾中安裝了大量.browser文件,這些文件供全部應用程序共享。咱們只是把 當前應用程序特有的瀏覽器文件放在App_Browser文件夾下。.browser文件的內容即時動態地進行編譯,以便向ASP.NET運行庫提供最新 的瀏覽器信息。工具
讓咱們簡單談談擁有一個自定義的.browser文件可能有幫助的場景。設想應用程序使用了一個在某個瀏覽器下不能有效呈現的控件。在指定的瀏覽器中顯示宿主頁面時,能夠編寫一個.browser文件,迫使ASP.NET使用一個不一樣的適配器來生成該控件。測試
<browsers>
<browser id="browserID">
<controlAdapters>
<adapter controlType="Samples.CustomControl"
adapterType="Samples.Adapters.CustomControlAdapter" />
</controlAdapters>
</browser>
</browsers>
假設browserID與ASP.NET識別的標準瀏覽器之一相匹配,則上文所示的.browser文件指示在指定的瀏覽器下使用CustomControlAdapter呈現CustomControl。
3. App_Code文件夾
App_Code文件夾正好在Web應用程序根目錄下,其存儲全部應看成爲應用程序的一部分動態編譯的類文件。這些類文件自 動連接到應用程序,而不須要在頁面中添加任何顯式指令或聲明來建立依賴性。App_Code文件夾中放置的類文件能夠包含任何可識別的ASP.NET組件 ——自定義控件、輔助類、build提供程序、業務類、自定義提供程序、HTTP處理程序等。
注意 在開發時,對App_Code文件夾的更改會致使整個應用程序從新編譯。對於大型項目,這可能不受歡迎,並且很耗時。爲此,鼓勵你們將代碼進行模塊化處理 到不一樣的類庫中,按邏輯上相關的類集合進行組織。應用程序專用的輔助類大多應當放置在App_Code文件夾中。
App_Code文件夾中存放的全部類文件應當使用相同的語言。若是類文件使用兩種或多種語言編寫,則必須建立特定語言的子目錄,以包含用每種語言編寫的類。一旦根據語言組織這些類文件,就要在web.config文件中爲每一個子目錄添加一個設置:
<compilation>
<codeSubDirectories>
<add directoryName="VBFolder" />
</codeSubDirectories>
</compilation>
重要的是,特定語言的子目錄應在web.config文件中註冊,不然,無論它們屬於哪一個文件夾,App_Code文件夾下 的全部文件將被編譯成一個單獨的程序集。上述配置腳本描述了這麼一種狀況,即全部的C#文件都放在App_Code文件夾的根目錄下,而把幾個 Visual Basic .NET類文件移入VBFolder目錄中。若是<codeSubDirectories>節中提到的目錄不存在,則會收到一個編譯錯誤提 示。
App_Code根文件夾中的文件被編譯成App_Code_xxx.dll程序集,其中xxx是隨機生成的字符序列。一個 給定子目錄中的文件將被編譯成一個名爲App_SubCode_xxx_yyy.dll的動態建立的程序集,其中xxx指示子目錄的名稱,而yyy是一個 隨機字符序列。只有在應用程序根目錄中的web.config文件中進行了設置,<codeSubDirectories>節纔有效。
在App_Code目錄或任何其餘子目錄中放置一個assemblyinfo.cs文件,能夠建立一個強命名的程序集。顯然,若是該文件夾包含Visual Basic .NET文件,那麼將使用assemblyinfo.vb文件。程序集配置文件能夠引用一個.snk文件來保存強名稱的密鑰。
注意 給一個程序集設置一個強名稱,首先必須得到一個公開/私有密鑰對。經過使用強名稱(Strong Name)工具(sn.exe),能夠得到這樣一個密鑰對。強名稱工具是咱們能夠在.NET Framework的安裝路徑中發現的SDK binary之一。密鑰對文件一般有一個.snk擴展名。能夠將該文件保存到一個應用程序文件夾中,並在assemblyinfo.cs文件中引用它,以下所示:
[assembly: AssemblyKeyFileAttribute(@"yourKeyPair.snk")]
注意,Visual Basic .NET是在包含Visual Studio Solution的目錄中尋找密鑰文件,而C#編譯器則在包含該binary的目錄中尋找密鑰文件。據此可知,用此屬性調整咱們使用的路徑,或者把密鑰文件放在合適的文件夾中。
在隨後發生的任何從新生成中,程序集的名稱將發生變化。同時,老的AppDomain請求一結束,就刪除老的程序集。
App_Code文件夾並不是只能包含類文件。特別是,它能夠包含並能自動地處理表明數據架構的XSD文件。把一個XSD文件 添加到該文件夾中時,編譯器將把它解析成一個有類型的DataSet類,並將它添加到應用程序做用域中。在ASP.NET 1.x中,這一工做由Visual Studio .NET嚮導,使用一個命令行實用程序(xsd.exe)完成的。
注意 使用web.config文件註冊一個組件(例如,一個自定義的服務器控件或一個自定義的HTTP處理程序)時,一般要求指定包含該代碼的程序集名稱。如 果該組件定義在App_Code文件夾中,則應該用什麼名稱來指示程序集?在這種狀況下,只是忽略程序集信息,並規定完整的類名便可。若是沒有規定任何程 序集,則ASP.NET運行庫將試圖從任何已裝載的程序集中裝入該類,包括爲App_Code文件夾動態建立的程序集。
4. App_Data文件夾
App_Data文件夾應該包含應用程序的本地數據存儲。它一般以文件(諸如Microsoft Access或Microsoft SQL Server Express數據庫、XML文件、文本文件以及應用程序支持的任何其餘文件)形式包含數據存儲。該文件夾內容不禁ASP.NET處理。該文件夾是ASP.NET提供程序存儲自身數據的默認位置。
注意 默認ASP.NET賬戶被授予對文件夾的徹底訪問權限。若是碰巧要改變ASP.NET賬戶,必定要確保新賬戶被授予對該文件夾的讀/寫訪問權。
5. App_GlobalResources文件夾
正如其餘應用程序同樣,ASP.NET應用程序也可使用資源,並且一般應該使用資源。資源是隔離應用程序用戶界面的可局部 化部分的一種有效方法。通常而言,資源是與程序相關的不可執行的文本。典型的資源有圖像、圖標、文本和附屬文件,可是任何可序列化的對象也能夠被看做資 源。應用程序資源存儲在應用程序的外部,這樣就能在不影響和從新編譯應用程序自己的狀況下從新編譯和替換它們。
ASP.NET應用程序須要有一個主要程序集來保存應用程序默認的或中性的資源。此外,還要部署許多附屬程序集,它們中各自 包含咱們須要支持的某種文化的本地化資源。在ASP.NET 1.x中,編譯一個程序集內的資源有點麻煩。須要手動地將基於XML的資源文件(那些帶.res擴展名的資源)編譯成.resources二進制文件。這 些文件既能夠嵌入到一個.NET可執行文件中,也能夠編譯成附屬程序集。使用資源文件生成器實用程序resgen.exe,將文本和基於XML的資源文件 轉變爲.resource文件。資源文件名稱遵循baseName.cultureName.resource命名約定,其中baseName一般是應用 程序的名稱:
resgen.exe ProAspNet20.resx ProAspNet20.it.resources
建立.resource文件之後,應當把它嵌入到一個程序集中,甚至能夠做爲一個資源容器來使用。要把一個資源文件嵌入到一個附屬程序集中,可使用程序集鏈接器工具(al.exe)。在命令行上,指出程序集所使用的文化(以下面示例中的it,它表明意大利)和名稱。
al /out:ProAspNet20.resources.dll /c:it /embed:ProAspNet20.it.resources
在編譯附屬程序集以後,它們將有相同的名稱。將它們部署到不一樣的子目錄中,分別按文化命名。
幸運的是,對於ASP.NET 2.0,附屬程序集的時代已經一去不復返了。更準確地說,附屬程序集仍然存在,可是因爲App_GlobalResources保留文件夾,對開發人員來講它們已經成爲過去的事情。
該文件夾中的任何定位的.resx文件自動地被編譯成附屬程序 集。.resx文件的名稱包含文化信息,以幫助ASP.NET運行庫環境的程序集生成。以下文件,resources.resx, resources.it.resx, resources.fr.resx,生成中性程序集以及適合於意大利(Italian)和法國(French)文化的附屬程序集。若是沒有要求特定文 化,則中性程序集是默認的文化資源。
App_GlobalResources文件夾中的資源文件是應用程序的全局資源,於是能夠從任何頁面中引用它。和ASP.NET 1.x相比資源讀取結果也極大地簡化了:
<asp:Label Runat="server" Text="<%$ Resources:ResxFile, MyResName %>" />
可使用最新的稱爲Resources的$-表達式以聲明的方式綁定全局資源(第5章將詳細介紹$-表達式)。該表達式包括兩個參數:.resx資源文件的名稱(沒有擴展名),以及要檢索的資源的名稱。以編程的方式訪問資源,請使用以下代碼:
HttpContext.GetGlobalResourceObject(resxFile, MyResName)
這兩個參數都是字符串,而且與$-表達式中的參數具備相同的做用。此外,$-表達式Resources的實如今內部使用GetGlobalResourceObject。
6. App_LocalResources文件夾
App_LocalResources文件夾位於包含一些ASP.NET頁面的文件夾下的一個子目錄。該文件夾可使用位於 目錄結構中高一級目錄中的頁面命名的.resx文件進行填充。假定父文件夾包含test.aspx,則能夠在App_LocalResources文件夾 中找到一些可用的資源文件以下:test.aspx.resx、test.aspx.it.resx和test.aspx.fr.resx。顯然,上述文 件中存儲的資源僅對test.aspx頁面有影響,於是只能在連接的頁面中看見它們(可使用它們)。
如何訪問一個頁面特有的資源呢?對於編程訪問,可以使用以下代碼:
HttpContext.GetLocalResourceObject("/ProAspNet20/ResPage.aspx",
"PageResource1.Title")
第1個參數指出頁面虛擬路徑;第2個參數是資源名稱。對於聲明式訪問,使用meta:ResourceKey屬性。例如,
<asp:Button Runat="server" meta:resourcekey="ButtonResource1" />
該聲明將一個唯一的資源鍵與特定按鈕實例關聯。局部文件.resx包含prefix.name形式的條目,其中prefix 是資源鍵,而name是綁定控件上的屬性名。爲了賦予按鈕一個本地化標題(Text屬性),只要在資源文件中建立一個 ButtonResource1.Text條目便可。
局部和全局資源文件夾中存在的資源文件都被編譯,以建立附屬程序集的類。最後的結果是開發人員建立.resx文件,並測試該頁面。而ASP.NET編譯機制會完成其他工做。
7. App_Themes文件夾
App_Themes文件夾爲ASP.NET控件定義主題。主題包含在App_Themes文件夾下的一個文件夾。根據定義,一個主題是一組帶有樣式信息的文件。主題文件夾中的文件內容被編譯,以生成一個類,而該類被頁面調用以編程的方式設置主題化控件的樣式。
App_Themes文件夾列出應用程序的本地主題。 應用程序還能夠繼承以下文件夾中定義的全局主題:
%WINDOWS%\Microsoft.NET\Framework\[version]\ASP.NETClientFiles\Themes
從編譯的角度看,全局主題和局部主題沒有區別。若是一個給定名稱的主題,既存在應用程序的本地主題,又存在服務器機器的全局主題,則本地主題優先適用。
8. App_WebReferences文件夾
在Visual Studio .NET 2003中,一個須要訪問Web服務的ASP.NET應用程序,將經過「添加Web引用」對話框得到相應的.wsdl文件。Web服務的WSDL(Web Service Description Language)文檔,對於從頁面使用Web服務是不夠的。ASP.NET頁面最終是一個託管類,而且須要與另外一個託管類通訊。所以,Web服務被一個 代理類所包裝。該代理類是由Visual Studio使用命令行工具wsdl.exe的服務建立的。該代理類儘可能包含與Web服務商的Web方法同樣多的方法,而且它結合了Web服務的公共接口 定義的任何自定義的數據類型。
這個操做不須要開發人員付出很大的代價。然而,開發人員顯然要依賴於Visual Studio來生成代理類。若是可以直接把.wsdl文件放在應用程序的目錄樹的某個地方,並讓ASP.NET處理其他的任務,這樣不是更容易、更簡單 嗎?這正好是App_WebReferences文件夾要作的事情。
它識別那些用來描述所綁定的Web服務的.wsdl文件,並生成運行時代理類,以便ASP.NET頁面可以以類型安全的方式 放置對Web服務的調用。App_WebReferences文件夾能夠包含子文件夾。子文件夾的名稱驅動最後所獲得的代理類的命名空間,而WSDL文件 定義類名。例如,samples.wsdl文件和ProsAspNet20子文件夾將建立一個稱爲ProAspNet20.Samples的代理類。該動 態建立的程序集稱爲App_WebReferences.xxx.dll,其中xxx是一個隨機的字符序列。
aspx是IE直接訪問的頁面,而ascx是用戶控件,通常是用來重用,
好比有二個aspx頁面,有一部分代碼同樣,所同樣的提取出來作成ascx,就能夠重用了.
若是單純N個aspx頁,就只能複製,粘貼,要修改時,就暈了.
ascx不能直接訪問只能插入aspx頁面呈現.
向頁眉導航,頁腳每一個頁都有,因此作好用戶控件而後每一個頁拖進去就能夠了
ascx即WebUserControl,和WindowsApplication中的UserControl做用相似,主要用於代碼的複用,使用以前須要在頁首加飲用。模塊化的開發機制也經常使用ascx做爲功能載體。用衆多的功能模塊(每一個模塊包含多個UserControl)合成一個網站。
ASP.NET 一個aspx文件能同時調用cs和ascx文件嗎?
固然 aspx 有本身的cs,它調用的ascx也有本身的cs
就是說aspx的cs文件與它調用的ascx文件是沒有關係的!
他們能夠同時使用!
關於.ASCX的用法的問題。
一個webform 工程中,假設有10個頁面,這10個頁面中若是在頁面的某個位置(好比第一個頁面在左上角,第二個頁面在右下角,第三。。。第十 位置都不重複)都有2個固定的控件(假設是一個 textbox 和 一個button),他們外觀相同,但他們後臺的業務邏輯處理都不相同,我可否使用.ASCX 實現嗎?
能夠啊,讓控件接收參數作不一樣處理便可。
.NET當中的DLL文件和ASCX文件的問題,
是否是說在DLL文件或是ASCX文件中寫畫面,而後在ASPX文件中引用.那ASPX文件裏能夠不寫任何關於畫面的代碼是嗎?有例子嗎,請高手指點.
能有例子嗎?有例子更詳細些.謝謝,我是初學者.
那ASPX裏寫什麼?只是引ASCX?ASCX寫畫面,後臺寫代碼的話,我以爲和直接在ASPX裏寫畫面,後臺.CS文件寫代碼沒區別.可不能夠在ASCX文件中只做畫面,而後引到ASPX裏,在ASPX裏寫後臺操做?
在你的ASCX文件中寫HTML代碼,在ASCX.CS文件中寫後臺邏輯。
在你要引用ASCX文件的ASPX頁面頭部加上:
<%@ Register TagPrefix="uc" TagName="ucSample" Src="你的ASCX文件在項目中的相對路徑" %>
在須要用到ASCX文件的地方加入:
<uc:ucSample ID="uc1" runat="server" />就能夠了。
之後你直接在ASCX文件和ASCX.cs文件裏改代碼就能夠了。
<%@ Register TagPrefix="Acme" TagName="Address" Src="address.ascx" %>
這句話作呵解釋啊?
ascx是用戶控件,這是註冊用戶控件
答2:
這句話實際上是用了一個address.ascx,Web 用戶控件
tagprefix
與命名空間關聯的別名。
tagname
與類關聯的別名。
Namespace
與 tagprefix 關聯的命名空間。
Src
與 tagprefix:tagname 對關聯的聲明性用戶控件文件的位置(相對的或絕對的)。
Assembly
與 tagprefix 關聯的命名空間所駐留的程序集。
注意 該程序集名稱不包含文件擴展名。
aspx是頁面文件 ascx是用戶控件,用戶控件必須嵌入到aspx中才能使用。 ascx是用戶控件,至關於模板 其實ascx你能夠理解爲Html裏的一部分代碼, 只是嵌到aspx裏而已, 由於aspx內容多的時候實在是不太好管理, 並且你把公共的Html部分寫成ascx也能夠公用在不少aspx裏 好比Web頁的下面註釋部分