Ajax Control Toolkit пользовательский расширитель вкладок для закрытия вкладок на стороне клиента - PullRequest
0 голосов
/ 20 июля 2010

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

Я новичок в расширениях элемента управления ASP, и до сих пор я следовал [учебнику] (http://www.asp.net/ajax/tutorials/creating-a-custom-ajax-control-toolkit-control-extender-cs"Creating Расширение элемента управления AJAX Control Toolkit ") на сайте 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, который я частично понимаю. Я также просмотрел несколько примеров управляющих удлинителей, в первую очередь расширители Мэтта Берсета и один от Дэна Уолина.

1 Ответ

0 голосов
/ 29 июля 2010

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

  • Чтобы расширить элемент управления 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;
            }
        }
    }
    
  • Что касается клиентского сценария поведения расширителя (и взаимодействия между сервером и клиентским кодом, статьи, перечисленные на этой странице MSDN , полезны и сэкономят вам много беда.

...