2009-03-24 2 views
0

평소와 같이 다양한 콘텐츠 자리 표시 자로 분할 된 마스터 페이지를 처리하고 있습니다. 여러 페이지에서 다른보기 모드 (보기/편집/추가)를 기반으로 내용을 표시하거나 숨기는 데 다중보기를 사용합니다. 이것은 마스터 페이지 콘텐츠 자리 표시 자당 하나의 멀티 뷰를 의미합니다 ...여러 asp.NET MultiViews 연결

'보기'에서 '편집'으로보기 모드를 전환해야 할 때 문제가 발생합니다. 해당 정보를 표시하려면 페이지의 모든 멀티 뷰를 변경해야합니다. 따라서 3 가지보기 모드가있는 4 가지 콘텐츠 자리 표시자가 있다고 가정 해 보겠습니다. 12 줄의 지루한 코드가 있습니다.

페이지에서 모든 멀티보기를 동기화하거나 연결하는 방법이 있는지 궁금합니다. 따라서 하나가 변경되면 모두 변경됩니다. 일종의 마스터 멀티 뷰를 통해?

View의 Activate 이벤트 사용에 대해 생각해 보았습니다.하지만 이것은 여전히 ​​피할 수있는 많은 배선 작업을 의미합니다.

C# eers!

답변

1

이 작업을 수행하는 가장 좋은 방법은 개별 멀티 뷰에서 이벤트 처리기를 추가하는 마스터 페이지에 이벤트를 배치하는 것입니다.

너무 많은 코드가 필요하지 않아야하며 모든 인스턴스에 대해 MultiView에서 상속되는 기본 클래스를 만들어 해당 코드가 중복되는 것을 방지 할 수 있습니다.

0

더 많은 자동 옵션 (그러나 RobW의 것과 같은 것은 아닙니다)은 다중 뷰의 페이지 컨트롤을 재귀 적으로 살펴 보는 것입니다. 다음과 같음 :

ApplyToControlsRecursive(Page, c => 
{ 
    var multi = c as System.Web.UI.WebControls.MultiView; 
    if (multi != null) 
     multi.ActiveViewIndex = 1; 
}); 
void ApplyToControlsRecursive(System.Web.UI.Control control, Action<System.Web.UI.Control> action) 
{ 
    action(control); 
    foreach (System.Web.UI.Control child in control.Controls) 
    { 
     ApplyToControlsRecursive(child, action); 
    } 
}