Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 扩展的正确方法是什么?_Asp.net_Custom Server Controls - Fatal编程技术网

Asp.net 扩展的正确方法是什么?

Asp.net 扩展的正确方法是什么?,asp.net,custom-server-controls,Asp.net,Custom Server Controls,我正在尝试创建一个自定义服务器控件CollapsablePanel,它扩展了ASP.net的面板。基本上,我要做的是使用当前面板,添加一个标题栏和任何必要的javascript来添加折叠/扩展功能。除此之外,我希望.aspx语法和常规面板功能保持不变。对于这种情况是否有某种最佳实践,或者我最终是否必须完全覆盖面板的HTML输出的呈现方式 谢谢 Mike对于如何扩展基本概念,您没有给出太多细节,但您需要做的只是创建自己的,从Panel派生为基类 class MyPanel : Panel {

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

谢谢


Mike

对于如何扩展基本概念,您没有给出太多细节,但您需要做的只是创建自己的,从Panel派生为基类

class MyPanel : Panel
{
    public MyPanel()
    {
    }

    etc...
}

除了基本概念之外,您没有给出关于如何扩展的详细信息,但是您所需要做的只是创建自己的,从Panel派生的基类

class MyPanel : Panel
{
    public MyPanel()
    {
    }

    etc...
}

Asp.NETAJAX控件工具包包含一个听起来可能适合您需要的类:类

如果这不起作用,你可以考虑继承而不是直接从面板继承,因为听起来你希望你的控件至少包含一个标签、一个图像和一个面板。 继承CompositeControl的一个优点是,即使您必须自己实现一些呈现逻辑,也可以将大多数实际HTML呈现委托给子控件。一些有用的链接:


Asp.NETAJAX控件工具包包含一个听起来可能适合您需要的类:类

如果这不起作用,你可以考虑继承而不是直接从面板继承,因为听起来你希望你的控件至少包含一个标签、一个图像和一个面板。 继承CompositeControl的一个优点是,即使您必须自己实现一些呈现逻辑,也可以将大多数实际HTML呈现委托给子控件。一些有用的链接:


在我看来,您只需要派生一个新的Panel类,然后覆盖渲染功能:

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>");
    }
}

在我看来,您只需要派生一个新的Panel类,然后覆盖渲染功能:

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>");
    }
}

谢谢你的回复!我已经为这个控件做了基本的基础设置,我甚至在我的aspx页面中使用这个控件。当然,除了扩展面板之外,我没有对控件做任何其他操作,因此它不会做任何不同的事情:。最终,我想象面板可能呈现如下内容:面板内容我希望它呈现如下内容:我的面板标题我的面板内容以及展开或折叠所需的任何控件/脚本。显然,我希望能够将“My Panel Title”设置为用户设置的某些属性值“Title”,并将“My Panel Content”设置为标记之间的任何值。如果是这种情况,我建议您查看原始面板的渲染代码,因为您将不得不覆盖它以获得所需的结果。感谢您的响应!我已经为这个控件做了基本的基础设置,我甚至在我的aspx页面中使用这个控件。当然,除了扩展面板之外,我没有对控件做任何其他操作,因此它不会做任何不同的事情:。最终,我想象面板可能呈现如下内容:面板内容我希望它呈现如下内容:我的面板标题我的面板内容以及展开或折叠所需的任何控件/脚本。显然,我希望能够将“My Panel Title”设置为用户设置的某些属性值“Title”,并将“My Panel Content”设置为标记之间的任何值。如果是这种情况,我建议您查看原始面板的渲染代码,因为您必须覆盖它以获得所需的结果。Jeff,是的,我在工具箱中看到了可折叠面板扩展程序,但它不太适合我的需要。此外,这是学习如何开发自己的控件的绝佳机会!:我听到了,我也做了同样的事Jeff,是的,我在工具箱中见过可折叠面板扩展程序,但它不太适合我的需要。此外,这是学习如何开发自己的控件的绝佳机会!:我听到了,我也做了同样的事卡博特,这可能是我完成这项工作的途径,我只是不确定是否最好以某种方式附加到现有的面板HTML,而不是手工编写。幸运的是,重新创建面板HTML;不需要太多工作;。不过,我有一个问题是如何访问.aspx页面上可折叠面板标记的内容。例如,如果我的aspx说我的内容,我如何在Render方法中访问我的内容?谢谢。我相信您必须查看面板中包含的所有控件,并将其呈现为:foreach Control cur in controls cur.rendercontrolwriter我使用了我的RenderChildrenwriter。你知道吗
现在,如果这将处理递归呈现我的子控件中的任何控件?CAbbott,这很可能是我完成这项工作的途径,我只是不确定是否最好以某种方式附加到现有的面板HTML,而不是手工编写。幸运的是,重新创建面板HTML;不需要太多工作;。不过,我有一个问题是如何访问.aspx页面上可折叠面板标记的内容。例如,如果我的aspx说我的内容,我如何在Render方法中访问我的内容?谢谢。我相信您必须查看面板中包含的所有控件,并将其呈现为:foreach Control cur in controls cur.rendercontrolwriter我使用了我的RenderChildrenwriter。您知道这是否可以递归地呈现我的子控件中的任何控件吗?