扩展<asp:panel>的正确方法是什么?</asp:panel>

时间:2009-10-14 20:02:49

标签: asp.net custom-server-controls

我正在尝试创建一个自定义服务器控件“CollapsablePanel”,它扩展了ASP.net的Panel。基本上我正在尝试做的是采用当前的Panel,添加标题栏和任何必要的JavaScript来添加折叠/展开功能。除此之外,我希望.aspx语法和常规面板功能保持不变。对于这种情况,是否存在某种最佳实践,或者我最终是否必须完全覆盖Panel的HTML输出的呈现方式?

谢谢,

麦克

3 个答案:

答案 0 :(得分:3)

听起来我只想要派生一个新的Panel类,然后覆盖Render功能:

public class MyPanel : Panel
{    
    protected override void Render(HtmlTextWriter writer)    
    {
        writer.Write("<div id=\"" + base.ClientID + "\">");
        writer.Write("..."); // Whatever else you want to render.
        writer.Write("</div>");
    }
}

答案 1 :(得分:2)

Asp.Net AJAX控件工具包包含一个听起来可能符合您需求的类:CollapsiblePanel

如果这不起作用,您可以考虑从CompositeControl而不是直接从Panel继承,因为听起来您希望您的控件包含Label,一个Image和一个Panel至少。

CompositeControl继承的一个优点是,即使您必须自己实现某些渲染逻辑,您也可以将大多数实际的HTML渲染委托给子控件。一些有用的链接:

答案 2 :(得分:0)

您没有详细介绍如何扩展,超越基本概念,但您需要做的只是创建自己的,从Panel派生为基类。

class MyPanel : Panel
{
    public MyPanel()
    {
    }

    etc...
}