2009-10-28 5 views
5

1.1 프로젝트를 2.0으로 변환하고 일부 사용자 정의 컨트롤에 문제가 있습니다.클래스 라이브러리의 UserControls

원래 프로젝트에는 클래스 라이브러리 프로젝트와 웹 사이트 프로젝트가있었습니다. 클래스 라이브러리 프로젝트에는 UserControls라는 폴더가 있었고 여기에는 몇 가지 ascx 파일과 코드 숨김 파일이있었습니다.

동일한 구조로 유지하고 싶습니다. 별도의 클래스 라이브러리 프로젝트에서이 새로운 컨트롤을 가져와야합니다. 전체 클래스에서 부분 클래스로 변경하고 CodeBehind를 페이지의 CodeFile로 변경했습니다. 다음과 같은 이전 사용자 컨트롤에서

은 사용자 컨트롤의 모든 웹 컨트롤이 나열된

protected System.Web.UI.WebControls.DropDownList _findModeList; 

나는 그것이 그물이 존재하고 CodeFile 특성을 대신 사용하여 생각

, 이 작업을 수행 할 필요는 없지만 생략하면 컴파일되지 않습니다.

그러나 포함 시키면 컴파일되지만 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."라는 메시지가 나타납니다. 코드 파일에서 _findModeList를 사용하려고하면 오류가 발생합니다.

사용자 컨트롤을 .net 2.0의 클래스 라이브러리에 넣을 수 있습니까?

답변

3

아니요. .ASCX 파일은이를 사용하는 각 웹 응용 프로그램 프로젝트에 포함되어야합니다. 중복을 피하기 위해 클래스 라이브러리의 폴더에 UserControl을 저장하고 Visual Studio의 "링크로 추가"기능을 사용할 수 있습니다.

웹 응용 프로그램의 상황에 맞는 메뉴에서 "기존 항목 추가"를 선택하고 사용자 정의 컨트롤을 선택한 다음 "추가"버튼을 클릭하는 대신 해당 버튼의 화살표를 클릭하고 "링크로 추가"를 선택하십시오.

1

웹 응용 프로그램 프로젝트로 작업하고 있습니까? 또는 웹 사이트? 혼란 스럽습니다. ...

WAP로 작업하는 경우 CodeFile을 사용하고 ASP.NET에서 .designer.cs 파일을 생성하도록하십시오. .acsx에서 객체를 선언하지 마십시오. CodeFile에서 참조하는 .cs 파일에서 _findModeList를 명시 적으로 선언하면 새/다른 DropDownList가 선언됩니다. 그래서 당신이 null 참조를 얻는 이유입니다 ... 그것은 초기화되지 않았습니다. .designer 파일이 없으면 솔루션 탐색기에서 .ascx를 마우스 오른쪽 단추로 클릭하고 "웹 응용 프로그램으로 변환"을 클릭하십시오.

WAP 대신 사이트로 작업하는 경우 CodeBehind 특성을 사용하십시오. ASP.NET 1.1과 마찬가지로 계속 작동하며 컴파일 중에 컴파일됩니다.

컨트롤을 DLL로 전체적으로 사용하려면 사용자 컨트롤 대신 "사용자 정의 컨트롤"을 사용하십시오. 다시 말하지만, 혼란 스럽습니다.

1

실제로 새 시도해 볼 수 있습니다 웹 응용 프로그램 프로젝트가 새로 작성되지 않음 웹 사이트,이 두 프로젝트가 다른 프로젝트이기 때문에 새로 작성하십시오.

웹 응용 프로그램을 만든 후에는 사용자 정의 컨트롤 (.ascx) 만 만들면됩니다. 그런 다음 웹 응용 프로그램 다시 작성을 시도 할 수 있습니다. 작업이 완료되면 bin 디렉토리로 이동하여 웹 응용 프로그램에 대한 dll이 있어야합니다. 이제이 dll을 다른 웹 사이트/웹 응용 프로그램 프로젝트에서 사용할 수 있습니다. 그냥이 DLL에 대한 참조를 추가하십시오.

1

< % @ Control %> 태그에서 상속 속성을 변경/추가 해 보셨습니까?

<%@ Control Language="C#" CodeBehind="<PathToTheFile>" Inherits="namespace.and.classname" %> 
관련 문제