당황스러운 점은 춘절 연휴 전에 코드를 작성했는데 왜 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의 콘텐츠는 로드하지 않으므로 문제가 나타납니다. 여기서 만났습니다.
다음은 MSDN의 http://msdn.microsoft.com/zh-cn/library/c76dd5k1.aspx 를 참조하여 컴파일된 @Register 명령을 작성하는 여러 가지 방법에 대한 요약입니다.
<%@ tagprefix="tagprefix" 네임스페이스="네임스페이스" 어셈블리="어셈블리" %> 등록
<%@ tagprefix="tagprefix" 네임스페이스="네임스페이스" %> 등록
<%@ 등록 tagprefix="tagprefix" tagname="tagname" src="pathname" %>각 속성에 대한 설명은 다음과 같습니다.
태그접두어
지시어가 포함된 파일에 사용된 태그의 네임스페이스에 대한 짧은 참조를 제공하는 임의의 별칭입니다.
네임스페이스 등록 중인 사용자 정의 컨트롤의 네임스페이스입니다.
tagname 클래스와 관련된 별칭입니다. 이 속성은 사용자 컨트롤에만 사용됩니다.
어셈블리 tagprefix 특성과 연결된 네임스페이스에 있는 어셈블리입니다.
어셈블리 이름에는 파일 확장자가 포함될 수 없습니다. 또한 어셈블리 특성이 누락된 경우 ASP.NET 분석기는 소스 코드가 응용 프로그램의 App_Code 폴더에 있다고 가정합니다. 컨트롤의 소스 코드를 컴파일하지 않고 페이지에 등록하려면 해당 소스 코드를 App_Code 폴더에 넣으세요. ASP.NET은 런타임에 App_Code 폴더의 소스 파일을 동적으로 컴파일합니다.
src 및 tagprefix:tagname 쌍과 연결된 선언적 ASP.NET 사용자 제어 파일의 위치(상대 또는 절대)입니다.
src 속성 값은 응용 프로그램의 루트 디렉터리에서 사용자 제어 소스 파일까지의 상대 경로 또는 절대 경로일 수 있습니다. 사용 편의성을 위해 상대 경로를 사용하는 것이 좋습니다. 예를 들어, 응용 프로그램의 모든 사용자 제어 파일이 응용 프로그램 루트 디렉터리의 Usercontrol 하위 디렉터리에 저장되어 있다고 가정합니다. Usercontrol1.ascx 파일에 사용자 정의 컨트롤을 포함하려면 @Register 지시문에 다음을 포함합니다.
Src="~usercontrolusercontrol1.ascx" 물결표(~) 문자는 응용 프로그램의 루트 디렉터리를 나타냅니다.