2012-08-03 2 views
1

패널 및 기타 gui 컨트롤이있는 사용자 정의 컨트롤이 있습니다. 그것은 웹 페이지를 렌더링 할 때 어떤 사용자 컨트롤처럼 사용됩니다. 그러나 나는 그것의 새로운 인스턴스를 사용하고 그것을 사용하지 않고 단지 그것을 사용하지 않고 코드에서 사용할 필요가있다. 그러나 코드에서 gui 컨트롤이 참조 될 때마다 실행 중에 객체 null 참조 오류가 발생합니다. 예를 들면 다음과 같습니다. pnlSomePanel.Visible = true;코드에서 웹 사용자 정의 컨트롤을 사용하는 방법 (렌더링 없음)?

사용자 컨트롤을 렌더링하지 않고 코드에서만 사용하는 방법은 무엇입니까? .NET 4.0 사용하기.

+1

책임의 분리의 경우처럼 들립니다. 나는 당신의 코드를 리팩터링하여 패널의 논리가 패널과 현재 어디에서 호출하려고 하는지를 구분하고 호출 할 수 있도록 제안 할 것이다. – vcsjones

+0

코드는 패널에만 한정되지 않습니다. 코드 참조 GUI 개체. uc는 다른 메서드를 호출하는 메서드를 가지고 있으며 uc에서 모든 속성을 사용하므로 uc는 전체적으로 사용하기 매우 쉽습니다. 나는이 큰 uc를 리펙토링 할 리소스가 없다. 코드에서 uc 만 사용하려면 bandaid 솔루션이 필요합니다. 그렇지 않으면 내가하고 싶지 않은 코드를 복제해야합니다. –

답변

0

기술적으로 코드 숨김 클래스 (웹 사이트가 아닌 asp.net 웹 응용 프로그램이라고 가정)의 새 인스턴스를 만들 수 있어야합니다.

그러나 비즈니스 로직이 해당 사용자 정의 컨트롤에 포함되어 있다면 별도의 클래스로 이동하거나 비즈니스 로직을 적절한 매개 변수 집합을 사용하는 정적 메소드로 노출하는 것이 좋습니다.

0

어때 ...

페이지에 모듈에 대한 참조를 추가하십시오.

<%@ Reference Control="~/modules/MyModule.ascx" %> 

그런 다음 모듈의 클래스 이름을 사용하여 코드에서 해당 모듈의 인스턴스를 만들 수 있습니다.

modules_MyModule ctrl = LoadControl("~/modules/MyModule.ascx") as modules_MyModule; 
ctrl.SomeMethod(); 

다음 단계 부모 컨테이너에 추가 할 수 있지만 그 단계를 건너 뛸 경우, 당신은 여전히 ​​뒤에 코드의 기능적인 목적이 있어야합니다. 이론적으로는 제대로 작동하는지 완전히 확신 할 수는 없습니다.

관련 문제