2010-07-20 9 views
0

Я пытаюсь написать расширитель управления AJAX, который может модифицировать AJAX Control Toolkit TabPanel, так что заголовок TabPanel имеет изображение после текста, которое при нажатии , скрывает заголовок вкладки, используя клиентский скрипт (без обратной передачи). Я также хотел бы указать функцию onClientClose, которая также вызывается, когда вкладка закрыта.Пользовательский расширитель вкладки Ajax Control Toolkit для закрытия вкладок на стороне клиента

Я новичок в ASP-расширителях, и до сих пор я следил за [tutorial] (http://www.asp.net/ajax/tutorials/creating-a-custom-ajax-control-toolkit-control-extender-cs «Создание пользовательского AJAX Control Toolkit Control Extender») на сайте ASP.NET для создания настраиваемого расширителя. Я назвал свой расширитель ClosableTabPanelExtender, и мой проект расширителя строит. Я создал веб-страницу тест следующим образом:

<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" /> 

До сих пор, я получаю следующее сообщение об ошибке, когда я запускаю сайт:
The TargetControlID of 'ClosableTabPanelExtender1' is not valid. A control with ID 'TabPanel1' could not be found.
ошибка заставляет меня думать, что TabPanel не может быть продлен , так мне придется расширять TabContainer?

Помимо ошибки, я мог бы использовать какое-то направление, особенно со сценарием Behavior. Это самая неуловимая часть для меня, хотя я знаю, что она, скорее всего, будет содержать большинство функциональных возможностей, которые я пытаюсь добавить. Я также не уверен, как другие части расширителя работают вместе с ним.

У меня есть исходный код Ajax Toolkit и просмотрели источник элементов управления Tab, которые я частично понимаю. Я также просмотрел несколько примеров управляющих расширителей, в основном Matt Berseth's extenders и один из Dan Wahlin.

ответ

0

Я, наконец, понял, что мне нужно делать. Для тех, кто заинтересован в решении:

  • Для того, чтобы расширить контроль TabPanel, мне пришлось обойти эту ошибку я разместил переопределение метода OnResolveControlID в серверном коде моего экстендера (ClosableTabPanelExtender.cs).

    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 полезны и сэкономят вам массу неприятностей.