【问题标题】:Server control in server control ASP.NET服务器控件 ASP.NET 中的服务器控件
【发布时间】:2012-07-12 12:21:14
【问题描述】:

我正在尝试学习如何为 asp.net 制作服务器控件。我使用的是第 3 方服务器控件的 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);
    }
}

由于某种原因,除非在与我的服务器控件相同的页面上有另一个 devexpress 控件,否则该按钮不会显示在设计视图中。知道如何解决这个问题吗?

【问题讨论】:

  • 尝试在btnTest.RenderControl(writer);之后添加base.Render(writer);。
  • 如果在标记中使用,您只需要使用[@Register]注册一个控件,而不是在自定义控件中。它应该在控制范围内工作......尝试执行@Ingenu的建议,看看它是否有所作为......
  • 其实我错了,它会使用 btnTest.RenderControl(writer); 注册 devexpress 控件;唯一的问题是它不会出现在设计视图中,除非在同一页面上有另一个 devexpress 控件。 (我修改了我的问题)

标签: c# asp.net custom-server-controls servercontrols


【解决方案1】:

由于您是从 CompositeControl 继承的,因此不应覆盖 Render。

【讨论】:

  • msdn.microsoft.com/en-us/library/3257x3ea.aspx这个例子是微软做的,是否需要重写Render()函数才能输出控件?
  • @rickster:不,CompositeControls 的正常行为是默认情况下它会渲染您在 CreateChildControls 方法中构建的任何控件树。 (我认为您指出的 MSDN 示例没有任何充分的理由通过覆盖渲染来使事情复杂化,因为它们所做的事情也可以在 CreateChildControls 中完成。尤其是因为他们懒得解释为什么这样做。 ..)
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 2010-11-14
  • 2011-02-15
相关资源
最近更新 更多