如何制作AjaxControlToolkit.TabContainer的自定义版本

时间:2012-06-05 14:47:35

标签: asp.net asp.net-ajax custom-controls custom-server-controls

我想这是捆绑在一个帖子中的很多问题。

我想构建一个类似于向导的控件,它看起来类似于TabContainer

enter image description here

但我需要某些自定义。这些就像我想要将一些帮助文本与TabPanel相关联。所以我想我想在tabpanel上写下我的标记,如下所示:

<cc1:MyTabPanel ID="mtp1" runat="server">
    <HelpTextTemplate>
        This is your step 1 which is about ...
    </HelpTextTemplate>
    <ContentTemplate>
        Content goes here...
    </ContentTemplate>
</cc1:MyTabPanel>

那你怎么做那样的标记...?我们对代码的控制如何能够访问HelpTextTemplate之间的数据 - 可能包含服务器控件和所有数据?

此外,请注意上面的图片中有一个名为“保存”的按钮。用户只需拖动并放入选项卡面板即可。当用户双击它时,我们在后面的代码中生成了一个方法存根(属于aspx页面)。这一切是如何实现的?

为了解决整个解决方案的问题,我意识到我们必须连接一些javascript来模拟该选项卡功能。这里也有css(注意标签后面的图像 - 渐变等)。我正在考虑的方面是将其变成一个控件,用户可以像工具包的tabcontainer控件一样使用开箱即用。因此,css / javascript应该被捆绑。怎么做到这一点?

编辑:

我也对控制设计师(设计时交互)部分感兴趣。我正在寻找与asp.net向导控件相同的功能。我找到了上面提到的一些问题的答案,我会在找到时间时添加它。

3 个答案:

答案 0 :(得分:0)

为了将脚本或图像嵌入到asp.net自定义控件中,我找到了以下网站中提到的解决方案:

Embed js resource with custom asp.net control

答案 1 :(得分:0)

我在这里建议它可能听起来太多了,但我想不出其他简单的方式来解决你的问题以及你赢得它的方式。

获取TabContainer的源代码,克隆它,并根据该源代码进行所有自定义设置。第一步是获取这个asp.net工具包的完整源代码,并使构建工作。第二步是使用新名称添加TabControl的克隆。然后,您可以使用此克隆根据需要进行更改。最后一步是尝试在独立库中分离自定义控件(如果可能)。

下载完整的asp.net ajax控件工具包的最新版本

http://ajaxcontroltoolkit.codeplex.com/SourceControl/list/changesets

在这里,您可以在线查看TabContainer的源代码

http://ajaxcontroltoolkit.codeplex.com/SourceControl/changeset/view/2c482e5ad6c4#Server%2fAjaxControlToolkit%2fTabs%2fTabContainer.cs

答案 2 :(得分:0)

您尝试构建的控件并不是非常复杂,但它确实涉及许多不同的技术。

我建议从头开始创建自己的控件,而不是继承现有的控件。可能使用CompositeControl作为基础是最好的,因为它为您提供了很大的灵活性。

对于HelpTextTemplate / ContentTemplate,您需要创建一些ITemplate容器,请查看本文http://msdn.microsoft.com/en-us/library/aa478964.aspx,了解如何设置它们。由于您可能想要访问HelpTextTemplate中的内容/控件,请查看本文以了解如何访问它们:ASP.Net ITemplate - ways of declaring

对于选项卡,由于这是自定义的,我可能会避免使用AjaxControlToolkit。相反,我会包含对jQuery UI的引用并使用jQuery UI选项卡:http://jqueryui.com/demos/tabs/。你的CompositeControl只需要输出一些div,ul / li元素,你就可以选择制作标签了。

如果您注意使用AJAX Control Toolkit选项卡,那么您仍然可以。您需要在自定义控件中实例化一个实例,将其添加到控件树中,然后使用如下技术:http://msdn.microsoft.com/en-us/library/0e39s2ck.aspx将模板的内容传输到标签页。

能够将控件从工具箱拖放到页面上很简单;如果您的服务器控件库已经是与您的网站相同的解决方案的一部分,那么它将只显示。在最坏的情况下,您可以使用“添加项”选项并通过浏览来添加DLL。至于双击按钮时如何创建Click事件(通过类上的属性完成),请查看本教程中有关设置默认事件的信息:http://msdn.microsoft.com/en-us/library/43sxkdeb

至于将javascript嵌入到库中,这两个问题涵盖了如何专门针对jQuery UI执行此操作,如果您选择其他路线它应该仍然是相关的:How to embed jquery library in asp.net custom server control?http://forums.asp.net/t/1599621.aspx/1

至于设计时支持,请尝试修改微软的文章(包括一个示例):http://msdn.microsoft.com/en-us/library/aa478960.aspx或其上的CodeProject文章:http://www.codeproject.com/Articles/9227/ASP-NET-Server-Control-Design-Time-Support