【问题标题】:Ajax Control Toolkit custom Tab extender to close tabs client-sideAjax Control Toolkit 自定义选项卡扩展器以关闭选项卡客户端
【发布时间】:2010-07-20 16:53:14
【问题描述】:

我正在尝试编写一个 AJAX 控件扩展器,它可以修改 AJAX 控件工具包TabPanel,以便TabPanel 的标题在文本之后有一个图像,当单击该图像时,使用客户端隐藏选项卡标题 -脚本(没有回发)。我还希望能够指定一个 onClientClose 函数,该函数在关闭选项卡时也会调用。

我是 ASP 控件扩展器的新手,到目前为止,我已经按照 ASP.NET 站点上的 [tutorial](http://www.asp.net/ajax/tutorials/creating-a-custom-ajax-control-toolkit-control-extender-cs"Creating a Custom AJAX Control Toolkit Control Extender") 来创建自定义扩展器。我将我的扩展器称为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 的一个。

【问题讨论】:

    标签: c# ajaxcontroltoolkit tabcontainer tabpanel extender


    【解决方案1】:

    我终于知道我需要做什么了。对于任何对解决方案感兴趣的人:

    • 为了扩展 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;
              }
          }
      }
      
    • 关于extender的客户端Behavior脚本(以及服务端和客户端代码的交互,this MSDN page上列出的文章很有帮助,会省去很多麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2012-10-24
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多