2009-12-06 6 views
0

새 웹 사이트 프로젝트를 만들었습니다. 일부 도우미 클래스는 App_Code 폴더에 있습니다. 페이지가 루트에 있습니다. 사용자 정의 컨트롤은 루트의 UserControls 폴더에 있습니다. 모든 페이지 클래스는 MyProjectName.Pages 네임 스페이스에 정의됩니다. 모든 사용자 제어 클래스는 MyProjectName.UserControls 네임 스페이스에 정의됩니다.컨트롤에서 페이지 클래스에 액세스 할 수 없습니다.

내 페이지에서 컨트롤로 액세스 할 수는 있지만 내 컨트롤에서 페이지 클래스에 액세스 할 수 없습니다. Page 속성을 사용하여 MyPage 클래스로 캐스팅하려고합니다 (처음부터 MyProjectName.Pages를 사용하여 지시문을 포함하십시오). 여기서 컴파일러는 MyProjectName 네임 스페이스에 형식 또는 네임 스페이스 페이지가 없다고 말합니다. 또한 개체 뷰어에서 이러한 네임 스페이스 (MyProjectName.Pages 및 MyProjectName.UserControls)가 표시되지 않습니다. 컨트롤의 페이지 클래스를 사용할 수 있도록 내 컨트롤과 페이지를 대체해야합니까?

+0

그리고 내 웹 사이트 프로젝트의 모든 네임 스페이스를 어떻게 볼 수 있습니까? – Sevina

답변

1

가장 좋은 방법은 웹 사이트에서 Web Project로 전환하는 것입니다.

WebSite "project"는 사이트가 배포 된 후 동적으로 페이지를 컴파일 할 수있는 의도로 ASP.NET 2.0에 도입 된 Microsoft의 위탁 아동입니다. 따라서 컴파일러는 페이지가 만들어지면 (이름 공간의 소개 및/또는 제거를 포함하여) 페이지가 수정 된 상황에 대비해야합니다. 이 문제에 대한 Microsoft의 해결책은 app_Code의 클래스를 페이지와 약간 분리하여 별도의 패스로 컴파일하는 것입니다.

처음에는 이것이 ASP.NET 2.0의 웹 응용 프로그램을위한 유일한 모델 이었지만 MS는 현재 ASP.NET 1.1에서 웹 프로젝트로 알려진 모델을 다시 도입 한 많은 문제 (사용자 중 하나 일뿐입니다)를 도입했습니다. 이 모델에는 이러한 제한 사항이 없지만 동적으로 apsx를 배포하는 것이 더 어렵습니다.

결말은 당신이 진짜로 aspx를 즉시 대체 할 수있는 경우가 아니라면 웹 프로젝트를 사용하는 것이 더 낫습니다. 그리고 당신이하는 경우 귀하의 웹 사이트의 디자인을 면밀히 살펴야합니다

+0

자세한 설명을 읽어 주셔서 감사합니다! 웹 프로젝트로 전환하려면 어떻게해야합니까? 그리고 web.config에서 IIS 설정이나 설정을 변경해야합니까? – Sevina

+1

이것은 MSDN에서 찾은 링크입니다. http://msdn.microsoft.com/en-us/library/aa983476%28VS.80%29.aspx – mfeingold

0

귀하의 문제에 대한 이유는 웹 사이트 프로젝트가 구축되는 방식과 관련이 있습니다. IIS에 의해 즉시 작성되도록 설계되었으므로 프로젝트의 모든 파일을 단일 DLL로 패키지하지 않습니다. 지원되는 링크가 제한됩니다. 공통 코드는 페이지 클래스가 아닌 App_Code에 있어야합니다.

또한 왜 컨트롤에서 페이지 클래스에 액세스하려고합니까? 이는 이상한 일이며 일반적으로 요구되어서는 안됩니다.

+0

마이그레이션했습니다! 대단히 고마워요! ..하지만 일부 컨트롤을 사용해서는 안됩니다. UserID와 같은 여러 컨트롤과 페이지에 공통적으로 사용됩니다 - 쿠키 userID에서 검색 -이 컨트롤을 pge에서 정의하고 일부 컨트롤에서 사용하므로 캐스트 페이지 클래스 – Sevina

+0

여전히 페이지 자체에서 이러한 속성을 정의하는 것은 신이 아닙니다. 이 접근법은 허약하고 쉽게 깨집니다. 더 좋은 방법이 있습니다. 즉, Web.Page에서 자신 만의 페이지 클래스를 파생시키고 거기에서 그러한 속성을 정의 할 수 있습니다. 귀하의 페이지는 귀하의 페이지 클래스에서 파생 될 수 있습니다. – mfeingold

+0

@Sevina : 컨트롤의 속성을 사용하여 페이지의 데이터를 컨트롤로 전달할 수 있습니다. 그것은 컨트롤이 어떻게 든 페이지로 다시 들어가도록 시도하는 것보다 훨씬 낫습니다. 또 다른 가능성은 HttpContext.Items []에서 요청 당 캐시에 매개 변수를 설정하거나 이러한 함수를 페이지에 넣는 대신 프로젝트 수준 범위의 함수를 사용하는 것입니다. – RickNZ

관련 문제