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