2010-04-02 3 views
5

각 탭의 내용을 나타내는 두 개의 컨트롤을 선언하는 C#/ASP.NET .aspx 페이지가 있습니다. 두 개의 컨트롤 중 어떤 것이 활성화되었는지를 결정하기 위해 쿼리 문자열 인수 (예 :? tab = 1)가 필요합니다. 내 문제는 둘 다 초기화 이벤트를 통해 이동하여 자식 컨트롤을 채우므로 CPU 리소스가 낭비되고 응답 시간이 느려진다는 점입니다. 어떤 식 으로든 초기화를 수행하지 않도록 비활성화 할 수 있습니까?어떻게 C# 웹 사용자 컨트롤을 선언하지만 초기화하지 못하나요?

<% if (TabId == 0) 
    { %> 
<my:usercontroltabone id="ctrl1" runat="server" /> 
<% } 
    else if (TabId == 1) 
    { %> 
<my:usercontroltabtwo id="ctrl2" runat="server" /> 
<% } %> 

을 그리고 그 부분은 잘 작동 :

내에서 .aspx 페이지는 다음과 같습니다. 나는 그게 < %가 컨트롤이 실제로 선언되지 않았으므로 초기화되지 않았을 것이라고 생각했지만 그게 초기화되지는 않았지만 그렇게하지는 않았지만 ...

답변

7

, 나는 하나 개의 대안 솔루션을 생각할 수 있습니다 : 피하기 마크 업의 컨트롤을 선언. 대신 Page_Init 이벤트 처리기에서 실제로 원하는 컨트롤을 페이지에로드하십시오. 이 경우 Page.LoadControl() 메서드를 사용할 수 있습니다.

void Page_Init(object sender, System.EventArgs e) 
{ 
    Control tab; 

    switch (TabId) 
    { 
     case 0: tab = LoadControl("usercontroltabone.ascx"); break; 
     case 1: tab = LoadControl("usercontroltabtwo.ascx"); break; 
     default: tab = LoadControl("defaulttab.ascx"); break; 
    } 

    somePlaceholder.Controls.Add(tab); 
} 
+0

스파게티 코드가 필요하다는 데 동의합니다. 오브젝트 지향형으로 유지하려면 로직을 코드 숨김으로 유지해야합니다. – Daniel

+0

이 방법은 잘 작동합니다.주의 사항은 viewstate에 의존하는 것입니다. 동적으로 추가 된 컨트롤에는 Viewstate가 자동으로로드되지 않습니다. –

+0

@Chuck : 내 기억이 맞다면 (웹 양식으로 많은 작업을 한 지 얼마되지 않아) 컨트롤이로드 될 때 실제로 의존합니다. 나는'Page_Load'보다는'Page_Init'에 로딩하는 것이 (대부분의) viewstate 문제를 해결한다고 믿는다. –

1

초기화 코드를 .Load에서 자신의 사용자 지정 공용 메서드를 호출하고 적절한 경우 개시자를 명시 적으로 호출합니다. 인라인/스파게티 서버 측 코드가 도움이되지 않는 경우

0

코드 비헤이비어에 논리를 적용하십시오.

는 제어 선언 :

<my:usercontroltabtwo id="ctrl2" Visible="False" runat="server" /> 

을 그리고 가시성 설정 :

if(TabId == 0) 
{ 
ctrl1.Visible = true; 
} 
else if(TabId == 1) 
{ 

ctrl2.Visible = true; 
} 
+2

이것은 도움이되지 않습니다. – SLaks

+0

@Chuck : 기본적으로 내가하고있는 일이지만 ctrl1과 ctrl2 (및 모든 하위 컨트롤)는 모두 시작 이벤트를 가졌으므로 피하려고합니다. –

+0

SLaks의 덧글에 추가 :이 접근법은 컨트롤을 * render *하지 않고 컨트롤 트리에로드하고 초기화합니다. 본질적으로 이것은 OP가 이미 가지고있는 것입니다. –

0

UserControl.dispose() 메소드 정지 UserControl을의 Page_Load 이벤트 발사를.

+0

이것은 나를 위해 작동하지 않았다. 나는 방금 내 페이지를 망가 뜨리는 것 같았다. –

관련 문제