2011-07-26 2 views
0

최근 상업적으로 사용 가능한 ASP.NET 제품을 다루었습니다.캐스팅 UserControl ASP.control_name_ascx vs Control_Name - 장점/단점?

Dim ctl As ASP.modules_controls_addressinput_ascx = DirectCast(Me.FindControl("AddressInput1"), ASP.modules_controls_addressinput_ascx) 

가 최근에 나는 내가 공개에 액세스 할 수 있습니다 내 자신의 프로젝트 중 하나에 자사의 특정 유형에 UserControl을 캐스팅하기 위해 필요한 : 코드에서 주위를 파고 때, 나는이처럼 보였다 UserControl을 주조 있다는 것을 발견 속성과 자연스럽게 내가 그것을 할 다른 방법을 보지 못했기 때문에 위에서 캐스팅 메서드를 복사했습니다.

그러나이 유형의 캐스팅을 사용하여 프로젝트를 배포 할 때는 "빌드"하지만 "알 수없는 유형"오류가있는 "게시"를 시도하면 실패합니다. 해당 UserControl이 ascx.vb 파일에 다음과 같이 선언

Dim ctl As Modules_Controls_AddressInput = DirectCast(Me.FindControl("AddressInput1"), Modules_Controls_AddressInput) 

: 실제로

Partial Class Modules_Controls_AddressInput 
    Inherits System.Web.UI.UserControl 

그리고이 일부 땜질 후, 나는 같이 일하는 것이 선언 된 클래스의 유형은 다음과 실현 또한 출판 문제를 해결했습니다.

제 질문은 누군가에게 첫 번째 방법과 두 번째 방법을 비교하도록 강요합니다. 특히 프로젝트 게시가 실패한다는 것을 의미 할 때 그렇습니다.

답변

2

확실하지는 않지만 첫 번째 방법은 asp.net 임시 폴더 의 컴파일 된 코드로 컨트롤을 캐스팅합니다. C : \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ ProjectName하지만 두 번째 방법은 클래스 자체에 캐스트합니다. 내 작품에서 보통 나는 어떤 사용자 컨트롤이 링크이 게시물에 http://msdn.microsoft.com/en-us/library/ms972975.aspx

+0

감사를 참조 할 수 있습니다 ASP.Net에서 사용자 컨트롤에 대한 자세한 자세한 내용은

Dim ctrl As MyControl = CType(Page.LoadControl("MyControl.ascx"), MyControl) ctrl.Property1 = value1 ctrl.Property2 = value2 

의 인스턴스를 생성 LoadControl("UserControlPath")를 사용합니다. +1이 ASP.NET 임시 폴더를 참조하고 있다고 설명하지만, 왜 누군가가 그렇게하고 싶은지에 대한 대답은 클래스 자체에 캐스팅하지 않았습니다. – NightOwl888