2010-07-20 2 views
0

AJAX 컨트롤 툴킷 TabPanel을 수정할 수있는 AJAX 컨트롤 익스텐더를 작성하려고 시도 할 때 TabPanel의 헤더에 클릭 한 텍스트 뒤에 이미지가 표시됩니다. 클라이언트 쪽 스크립트 (다시 게시하지 않음)를 사용하여 탭 머리글을 숨 깁니다. 또한 탭 닫을 때 호출되는 onClientClose 함수를 지정할 수 있기를 원합니다.Ajax Control Toolkit 사용자 정의 탭 익스텐더로 클라이언트 측 탭 닫음

저는 ASP 컨트롤 익스텐더를 처음 접했고, 지금까지 사용자 지정 익스텐더를 만들기 위해 ASP.NET 사이트에서 [튜토리얼] (http://www.asp.net/ajax/tutorials/creating-a-custom-ajax-control-toolkit-control-extender-cs "사용자 지정 AJAX Control Toolkit 컨트롤 확장자 만들기")을 수행했습니다. 내 익스텐더를 ClosableTabPanelExtender이라고 부르며 익스텐더 프로젝트를 빌드합니다.
The TargetControlID of 'ClosableTabPanelExtender1' is not valid. A control with ID 'TabPanel1' could not be found.
오류가 나에게 TabPanel 확장 할 수 없다고 생각한다 : 나는 웹 사이트를 실행할 때 다음과 같은 오류를 얻고, 지금까지

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" /> 
<asp:TabContainer ID="TabContainer1" runat="server"> 
    <asp:TabPanel ID="TabPanel0" runat="server"> 
     <HeaderTemplate>Tab 0</HeaderTemplate> 
     <ContentTemplate>Hello!</ContentTemplate> 
    </asp:TabPanel> 
    <asp:TabPanel ID="TabPanel1" runat="server"> 
     <HeaderTemplate>Tab 1</HeaderTemplate> 
     <ContentTemplate>Goodbye!</ContentTemplate> 
    </asp:TabPanel> 
</asp:TabContainer> 
<cc1:ClosableTabPanelExtender ID="ClosableTabPanelExtender1" runat="server" 
    TargetControlID="TabPanel1" /> 

: 그래서 같은 테스트 웹 페이지를 설정 , 그래서 나는 TabContainer을 대신 확장해야 할 것인가?

오류 이외에도, 특히 동작 스크립트에서 어떤 방향을 사용할 수 있습니다. 나에게 가장 어려운 부분이지만, 내가 추가하려고하는 대부분의 기능을 수용 할 가능성이 높다. 또한 Extender의 다른 부분이 어떻게 함께 작동하는지 잘 모르겠습니다.

나는 Ajax Toolkit 소스 코드를 가지고 있으며 부분적으로 이해할 수있는 Tab 컨트롤의 소스를 조사했다. 또한 컨트롤 익스텐더의 몇 가지 예를 살펴 보았습니다 (주로 Matt Berseth's extenders). Dan Wahlin이 하나입니다.

답변

0

마침내 내가해야 할 일을 알았습니다. 이 솔루션에 관심이 누군가를 위해 :

  • 이제 TabPanel 컨트롤을 확장하기 위해, 나는 내 연장의 서버 코드 (ClosableTabPanelExtender.cs)에서 OnResolveControlID 방법을 재정 의하여 게시 오류 극복했다. 확장기의 클라이언트 측 동작 스크립트 (및 서버와 클라이언트 코드 사이의 상호 작용에 관해서는

    protected override void OnResolveControlID(ResolveControlEventArgs e) 
    { 
        // Get a reference to the outermost TabContainer that contains the TabPanel being extended. 
        TabContainer tabContainer = (TabContainer)base.FindControl(OuterTabPanelID); 
        if (tabContainer != null) 
        { 
         // Check to see if any of the tabs are the control we are looking form. 
         foreach (TabPanel tab in tabContainer.Tabs) 
         { 
          if (tab.ID == e.ControlID) 
          { 
           e.Control = tab; 
           return; 
          } 
         } 
         // If none of the tabs are what we are looking for, search the contents of each tab. 
         foreach (TabPanel tab in tabContainer.Tabs) 
         { 
          Control ctrl = tab.FindControl(e.ControlID); 
          if (ctrl != null) 
           return; 
         } 
        } 
    } 
    
  • , this MSDN page에 나와있는 기사는 도움이되고 당신에게 문제를 많이 절약 할 수 있습니다.