比较汗颜的一件事情,春节放假前,自己写的一段代码,不知道为啥,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" 代字号 (~) 字符表示应用程序的根目录