比較汗顏的一件事情,春節放假前,自己寫的一段代碼,不知道為啥,ASPX ,能加載ASCX.cs 中的代碼,但是不能加載ASCX 中的源文件, 由於靜不下心來,就沒有解決這個問題,今天回來上班後,發現竟然是ASPX 的@Register 指令寫錯了導致了的。
正確的應該是寫成下面方式:
<%@ Register TagPrefix="myTagPrefix" TagName="ConfigNavigation" Src="/Controls/ConfigNavigation.ascx" %> 但我卻把它寫成了下面方式:
<%@ Register TagPrefix="myTagPrefix" Namespace="MyWEB.Controls" Assembly="MyWebProject" %>後一種寫法,只會載入cs檔案對應的類,而不會載入ascx 中的內容,從而出現了我這裡碰到的問題。
以下是@Register 指令的幾種寫法匯總,參考MSDN的http://msdn.microsoft.com/zh-cn/library/c76dd5k1.aspx整理而來:
<%@ Register tagprefix="tagprefix" namespace="namespace" assembly="assembly" %>
<%@ Register tagprefix="tagprefix" namespace="namespace" %>
<%@ Register tagprefix="tagprefix" tagname="tagname" src="pathname" %>其中的每一個屬性描述如下:
tagprefix
一個任意別名,它提供包含指令的檔案中所使用的標記的命名空間的短引用。
namespace 正在註冊的自訂控制項的命名空間。
tagname 與類別關聯的任意別名。此屬性只用於使用者控制項。
assembly 與tagprefix 屬性關聯的命名空間所駐留的組件。
程序集名稱不能包括檔案副檔名。另請注意,如果assembly 屬性遺失,ASP.NET 分析器會假定應用程式的App_Code 資料夾中存在原始程式碼。如果您希望在頁面上註冊控制項的原始程式碼而不對其進行編譯,請將原始程式碼放在App_Code 資料夾中。 ASP.NET 在執行時期動態編譯App_Code 資料夾中的原始檔。
src 與tagprefix:tagname 對關聯的聲明性ASP.NET 使用者控制項檔案的位置(相對的或絕對的)。
src 屬性值既可以是相對路徑,也可以是從應用程式的根目錄到使用者控制項原始檔的絕對路徑。為方便使用,建議使用相對路徑。例如,假設將應用程式的所有使用者控制項檔案儲存在應用程式根目錄的子目錄Usercontrol 中。若要包含Usercontrol1.ascx 檔案中的使用者控件,請在@ Register 指令中包含以下內容:
Src="~usercontrolusercontrol1.ascx" 代字號(~) 字元表示應用程式的根目錄