C# 服务器控件ASP.NET中的服务器控件
我正在尝试学习如何为asp.net制作服务器控件。我使用第三方服务器控件DevExpress。我正在尝试将DevExpress按钮添加到服务器控件C# 服务器控件ASP.NET中的服务器控件,c#,asp.net,custom-server-controls,servercontrols,C#,Asp.net,Custom Server Controls,Servercontrols,我正在尝试学习如何为asp.net制作服务器控件。我使用第三方服务器控件DevExpress。我正在尝试将DevExpress按钮添加到服务器控件 public class Class1 : CompositeControl { private DevExpress.Web.ASPxEditors.ASPxButton btnTest; protected override void Render(HtmlTextWriter writer) {
public class Class1 : CompositeControl
{
private DevExpress.Web.ASPxEditors.ASPxButton btnTest;
protected override void Render(HtmlTextWriter writer)
{
btnTest.RenderControl(writer);
}
protected override void CreateChildControls()
{
btnTest = new DevExpress.Web.ASPxEditors.ASPxButton();
btnTest.Text = "wazzzup";
Controls.Add(btnTest);
}
}
出于某种原因,除非与我的服务器控件位于同一页面上,否则该按钮不会显示在设计视图中。知道如何解决这个问题吗?既然您是从CompositeControl继承的,就不应该覆盖Render。尝试添加
base.Render(writer)代码>后btnTest.RenderControl(writer)代码>。如果在标记中使用,则只需使用[@register]注册控件,而不需要在自定义控件中注册。它应该在控制范围内工作。。。尝试执行@Ingenu的建议,看看是否有不同……实际上我错了,它将使用btnTest.RenderControl(writer)注册devexpress控件;唯一的问题是它不会显示在设计视图中,除非在同一页面上有另一个devexpress控件。(我修改了我的问题)Microsoft正在执行此操作。在本例中,是否需要重写Render()函数以输出控件?@rickster:否,CompositeControls的正常行为是,默认情况下,它将呈现您在CreateChildControls方法内构建的任何控件树。(我看不出你所指的MSDN示例有什么理由通过覆盖render使事情复杂化,因为它们所做的也可以在CreateChildControls中完成。特别是因为它们没有费心解释为什么这样做……)