Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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
C# 服务器控件ASP.NET中的服务器控件_C#_Asp.net_Custom Server Controls_Servercontrols - Fatal编程技术网

C# 服务器控件ASP.NET中的服务器控件

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) {

我正在尝试学习如何为asp.net制作服务器控件。我使用第三方服务器控件DevExpress。我正在尝试将DevExpress按钮添加到服务器控件

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中完成。特别是因为它们没有费心解释为什么这样做……)