本文說明如何在 Microsoft ASP.NET 應用程式中開發使用程式代碼後置類別檔案的.aspx頁面。 本文中的程式代碼範例包含預先編譯的程式代碼後置類別檔案和依需求編譯的程式代碼後置類別檔案的需求。
原始產品版本: ASP.NET
原始 KB 編號: 308143
需求
下列清單概述您需要的建議硬體、軟體和網路基礎結構:
- Windows
- .NET Framework
- Internet Information Services (IIS)
使用 Visual C# .NET 建立 ASP.NET Web 應用程式
本節示範如何建立名為 CodeBehindSamples 的新 ASP.NET Web 應用程式。
- 啟動 Visual Studio .NET。
- 在 [檔案] 功能表上,指向 [開新檔案] ,然後按一下 [專案] 。
- 在 [項目類型] 底下,按兩下 [Visual C# 專案]。 在 [範本] 底下,按兩下 [ASP.NET Web 應用程式]。
- 在 [ 名稱] 方塊中,輸入 CodeBehindSamples。 在 [ 位置] 方塊中 ,輸入 ServerName。 如果您使用本地伺服器,請將 [ 位置 ] 保留為
http://localhost。
使用程式代碼後置類別檔案
如果您使用程式代碼後置類別檔案搭配.aspx頁,您可以將簡報程式代碼與核心應用程式邏輯(或程序代碼後置)分開。 程序代碼後置類別檔案會進行編譯,以便建立並做為物件使用。 這允許存取其屬性、其方法和事件處理程式。 若要這樣做,.aspx頁面必須指定繼承自程式代碼後置基類。 若要這樣做,請使用 Inherits 指示詞的 @ Page 屬性。 .aspx頁面繼承自程式代碼後置類別,而程式代碼後置類別則繼承自 Page 類別。
根據預設,如果您使用 Visual Studio .NET, Codebehind 屬性會新增至 @ Page 指示詞。 .NET Framework 實際上不會使用這個屬性。 相反地,Visual Studio .NET 會使用這個屬性來維護.aspx頁面相關聯程序代碼後置檔案的參考。
若要示範 Visual Studio .NET Codebehind 如何使用 屬性,請移除 Codebehind 屬性。 您無法再以滑鼠右鍵按兩下 [.aspx] 頁面,然後按兩下 [ 檢視程序代碼]。 因為 Visual Studio .NET 不再包含可用於頁面的類別檔案參考,所以會發生此行為。 請記住,這不是 .NET Framework 使用程式代碼後置類別檔案的方式,而是Visual Studio .NET 如何管理這些項目檔。
搭配先行編譯類別使用 Inherits 屬性
如果您將程式代碼後置類別預先編譯成元件,您可以使用 Inherits 屬性來指定要繼承的類別。 在此案例中,部署應用程式時,您不需要包含實際的程式代碼後置類別檔案。 相反地,您必須部署元件和.aspx頁面。 當您部署應用程式時,您必須將元件 Bin 放在應用程式的資料夾中。
本節示範如何建立使用先行編譯方法的新Web Form,並從程式代碼後置類別繼承。
若要將名為 InheritSample.aspx 的新 Web Form 新增至 Visual Studio .NET 專案,請遵循下列步驟:
- 在 方案總管 中,以滑鼠右鍵按兩下項目節點,按兩下 [新增],然後按兩下 [新增Web窗體]。
- 在 [ 名稱] 方塊中,輸入 InheritSample.aspx,然後按兩下 [ 開啟]。
切換至 [設計 ] 檢視,然後將 [Web 窗體 卷標 ] 控件新增至 [.aspx] 頁面。
以滑鼠右鍵按兩下 [.aspx] 頁面,然後按兩下 [ 檢視程序代碼]。 程序代碼後置檔案會在編輯器中開啟。
在程式代碼後置檔案中,將下列程式代碼新增至
Page_Load事件處理程式:private void Page_Load(object sender, System.EventArgs e) { Label1.Text = "(Precompiled): Page_Load fired!"; }注意
此程式代碼只會示範程序代碼後置類別在後續步驟的運行時間參與範例。
從程式代碼後置類別檔案切換至編輯器中的 [.aspx] 頁面,然後切換至 HTML 檢視。
在頁面頂端,檢閱 指示詞的程序
@ Page代碼。 程式代碼應該類似下列預設程式代碼:<%@ Page language="c#" Codebehind="InheritSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.InheritSample" %>在此範例中,.aspx頁面繼承自命名空間中
CodeBehindSamples名為InheritSamples的程序代碼後置類別。 根據預設,在 Visual Studio .NET 中建立的 Web 應用程式會使用ProjectName.ClassName屬性值的結構Inherits。在 [ 檔案] 功能表上,單擊 [ 全部 儲存] 以儲存 Web 窗體和其他相關聯的項目檔。
在 Visual Studio .NET IDE 的 [建置] 功能表上,按兩下 [建置] 以建置專案。
在 [專案] 功能表上,按一下 [顯示所有檔案]。
在 [方案總管] 中,按兩下以展開
Bin資料夾。 當您從上一節編譯專案時所產生的元件(在此 範例中為CodeBehindSamples.dll ),會出現在Bin資料夾中。在 Visual Studio .NET 中,以滑鼠右鍵按兩下 方案總管 中的頁面,然後按兩下 [在瀏覽器中檢視] 以執行程式代碼。 標籤會填入下列值:
(Precompiled): Page_Load fired!
使用 Src 屬性並視需要編譯
如果您的程式代碼後置類別檔案會視需要編譯,而不是先行編譯,您必須使用 Src 屬性來指定程式代碼後置類別檔案的相對路徑。 當您使用此方法部署應用程式時,請確定您包含實際的類別檔案。
注意
如需在 Src Visual Studio .NET 中使用 屬性開發應用程式時的潛在問題詳細資訊,請參閱 本文中的參考 一節。 Visual Studio .NET 的設計目的是利用先行編譯應用程式程式代碼到元件,而不是使用本節中所述的編譯隨選方法。
若要在 Visual Studio .NET 中將名為 SrcSample.aspx 的新 Web Form 新增至您的專案,請遵循下列步驟:
- 在 方案總管 中,以滑鼠右鍵按兩下項目節點,按兩下 [新增],然後按兩下 [新增Web窗體]。
- 在 [ 名稱] 方塊中,輸入 SrcSample.aspx,然後按兩下 [ 開啟]。
切換至 [設計 ] 檢視,然後將 [Web 窗體 卷標 ] 控件新增至 [.aspx] 頁面。
以滑鼠右鍵按兩下 [.aspx] 頁面,然後按兩下 [ 檢視程序代碼]。 程序代碼後置檔案會在編輯器中開啟。
在程式代碼後置檔案中,將下列程式代碼新增至
Page_Load事件:private void Page_Load(object sender, System.EventArgs e) { Label1.Text = "(Src): Page_Load fired!"; }從程式代碼後置類別檔案切換至編輯器中的 [.aspx] 頁面,然後切換至 HTML 檢視。
在頁面頂端,檢閱 指示詞的程序
@ Page代碼。 程式代碼應該類似下列預設程式代碼:<%@ Page language="c#" Codebehind="SrcSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.SrcSample"%>若要簡化此範例,請從專案刪除 Global.asax 檔案。 這隻會在此範例中完成,以防止與 Global.asax 檔案的程式代碼後置頁面相關的其他錯誤。
在 [ 檔案] 功能表上,單擊 [ 全部 儲存] 以儲存 Web 窗體和其他相關聯的項目檔。
注意
因為您希望此範例的程式代碼後置類別檔案視需要編譯,因此現在請勿建置方案。
如果您遵循使用具有先行編譯類別的繼承屬性一節中列出的步驟,您必須先刪除應用程式目錄中的元件
Bin,才能遵循本節的其餘步驟。如需詳細資訊,請流覽 本文的疑難解答 一節。
若要執行頁面,請啟動 Internet Explorer,然後手動輸入頁面的 URL。 請勿從 Visual Studio .NET IDE 中選取 [ 在瀏覽器中 檢視] 或 [ 流覽方式 ] 選項。 否則,如果您使用 Visual Studio .NET 2003,程式代碼後置頁面將會預先編譯成預設位於目錄中的
Bin元件。 檢視頁面之後,您會收到類似以下的錯誤訊息:無法載入類型 『CodeBehindSamples.SrcSample』。
之所以發生此錯誤,是因為程式代碼後置類別檔案尚未編譯,而且您尚未包含
Src參考程式代碼後置類別檔案的屬性。將
Src屬性新增至 指示詞,@ Page如下所示:<%@ Page language="c#" Codebehind="SrcSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.SrcSample" Src="SrcSample.aspx.cs"%>屬性
Src會以程式代碼後置類別檔案 (SrcSample.aspx.cs) 的相對路徑列出,而Inherits屬性值會設定為參考CodeBehindSamples.SrcSample。在 [ 檔案] 功能表上,單擊 [ 全部 儲存] 以儲存 Web 窗體和其他相關聯的項目檔。 請記住,請勿建置解決方案,因為您想要依需求編譯此範例的程式代碼後置類別檔案。
若要執行頁面,請啟動 Internet Explorer,然後手動輸入頁面的 URL。 請勿從 Visual Studio .NET IDE 中選取 [ 在瀏覽器中 檢視] 或 [ 流覽方式 ] 選項。 否則,如果您使用 Visual Studio .NET 2003,程式代碼後置頁面將會預先編譯成預設位於目錄中的
Bin元件。 此時,頁面應該載入瀏覽器中,且標籤會填入下列值:(Src): Page_Load fired!程序代碼後置類別檔案現在已依需求編譯,且函式正確。
疑難排解
如果您在 Visual Studio .NET 中預先編譯應用程式,然後嘗試使用
Src屬性來套用編譯隨選方法,您可能會收到類似下列的錯誤訊息:編譯程式錯誤訊息:CS1595:'ProjectName.CodeBehindClassName' 定義於多個位置; 使用 '%windir%:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\YourProjectName\d1444413\36fce407\assembly\dl2\009389be\231afa2d_d586c301\YourAssemblyName。DLL'
請記住,錯誤訊息中所列路徑中 YourProjectName 後面的目錄名稱可能會不同,因為 ASP.NET 會自動處理目錄及其名稱的建置。
如果您使用
Src屬性,您必須遵循下列步驟來解決與錯誤訊息相關聯的問題:刪除錯誤訊息中所參考的 YourProjectName 目錄。 在完成此步驟之前,您可能也必須從命令提示字元執行
iisreset命令。 否則,您可能會收到下列錯誤訊息:無法刪除 GeneratedName.dll:拒絕存取。
請確定磁碟未完整或受寫入保護,且檔案目前未使用中。刪除應用程式目錄中的元件
Bin。若要執行頁面,請啟動 Internet Explorer,然後手動輸入頁面的 URL。 請勿從 Visual Studio .NET IDE 中選取 [ 在瀏覽器中 檢視] 或 [ 流覽方式 ] 選項。 否則,如果您使用 Visual Studio .NET 2003,程式代碼後置頁面將會預先編譯成預設位於目錄中的
Bin元件。
注意
Microsoft建議您使用先行編譯方法,而不是使用隨選編譯方法(使用
Src屬性),如果您使用 Visual Studio .NET 開發應用程式,以避免這類問題。如果您想要或必須包含單一檔案中的網頁表單頁面,請開發您的.aspx頁面以包含您的程式碼,而不是程式碼後置類別檔案。
如需如何在Visual Studio .NET 中開發單一檔案 Web Form 的詳細資訊,請參閱Visual Studio 2003已淘汰的技術檔。
如果您未預先編譯程式代碼後置類別檔案,且未將 屬性新增
Src至@ Page指示詞,或屬性的虛擬路徑不正確,您會收到下列錯誤訊息:無法載入類型 『CodeBehindSamples.SrcSample』。
當您部署.aspx頁面時,如果其相關聯的程式代碼後置類別檔案已預先編譯,您只需要將元件部署至
Bin應用程式的資料夾。 您不需要使用應用程式部署實際的程式代碼後置類別檔案。當您部署.aspx頁面時,如果未先行編譯其相關聯的程式代碼後置類別檔案,您必須使用應用程式部署程式代碼後置類別檔案。 此外,您必須將 屬性新增
Src至@ Page指示詞,因為類別檔案在依需求編譯時必須可用。
參考資料
如需元件的詳細資訊,請參閱 元件。
如需與 ASP.NET 程式設計相關的其他文章、範例和其他資源,請參閱 ASP.NET。
如需 @ Page 指示詞及其各種屬性的詳細資訊,請參閱 @ Page。
如需一般 Web Form 語法的詳細資訊,請參閱 Web Form 語法。
如需詳細資訊,請參閱 ASP.NET 程序代碼後置模型概觀。