我正在尝试编写一个可以修改AJAX控件工具包TabPanel
的AJAX控件扩展器,以便TabPanel
的标头在文本后面有一个图像,单击该图像时会隐藏选项卡使用客户端脚本的头文件(没有回发)。我还希望能够指定一个onClientClose函数,该函数在关闭选项卡时也会被调用。
我是ASP控件扩展器的新手,到目前为止,我已经按照ASP.NET网站上的[教程](http://www.asp.net/ajax/tutorials/creating-a-custom-ajax-control-toolkit-control-extender-cs“创建自定义AJAX控件工具包控件扩展器”)来创建自定义扩展。我称我的扩展程序为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 :(得分: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上列出的文章很有用,可以为您节省很多麻烦。