【问题标题】:How to put a 3rd party server control inside a custom server control in ASP.Net?如何将第 3 方服务器控件放入 ASP.Net 中的自定义服务器控件中?
【发布时间】:2011-07-10 02:33:51
【问题描述】:

我正在使用 Telerik ASP.Net Ajax 控件(理论上谁让第 3 方控件无关紧要)。我想创建我自己的自定义服务器控件(不是用户控件),它具有我自己的预定义 HTML 输出,但还包括 Telerik DatePicker。由于 Telerik DatePicker 是另一个服务器控件将服务器控件放入我的自定义服务器控件的正确过程是什么

我的理解是服务器控件通过编写 html 输出来工作。如何编写我在 Render 方法中实例化的另一个控件的输出,并且仍然保留原始控件的各个生命周期。

期望的结果:

  • 我自己的自定义服务器控件包含许多第 3 方控件(即 RadDatePicker)。

解决方案

感谢@Sumo 为我指明了 Composite 控件的方向。文档可用here

我能够通过创建一个继承CompositeDataBoundControl 的控件来解决这个问题。然后对我的数据源进行数据绑定,计算需要多少自定义控件,将它们放入 ArrayList 并正确实例化它们(在CreateChildControls() 中使用它们自己的生命周期)。然后,我可以通过调用尚未呈现的 ArrayList 索引,在 Render() 方法中呈现 DatePicker 的 ArrayList 中的每个控件。 例如。 ((RadDatePicker)datePickerArray(instantiatedDatePickersCount)).RenderControl(writer).

目前它是一个肮脏的解决方案,但它适用于我的测试目的。

【问题讨论】:

    标签: asp.net telerik custom-server-controls


    【解决方案1】:

    您需要创建一个CompositeControl。这使您可以使用 CreateChildControls 的覆盖轻松添加 HTML 标记和控件,而不必考虑太多其他问题。

    一些示例代码:

    using System.ComponentModel;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    
    namespace TestServerControls {
        [DefaultProperty("Text")]
        [ToolboxData("<{0}:GridWithHeader runat=server></{0}:GridWithHeader>")]
        public class GridWithHeader : CompositeControl {
            private readonly GridView _grid = new GridView();
            private readonly HtmlGenericControl _header = new HtmlGenericControl("h1");
    
            public string Text {
                get { return _header.InnerHtml; }
                set { _header.InnerHtml = value; }
            }
    
            protected override void CreateChildControls() {
                Controls.Add(_header);
                Controls.Add(_grid);
            }
        }
    }
    

    【讨论】:

    • 所以我不会使用writer 样式的输出?
    • 目前我只是在研究复合控件 - 不知道它们存在。
    • 再次感谢您。我能够使用CompositeDataBoundControl 来达到预期的效果。我可以根据HtmlTextWriter 代码和controlName.RenderControl()CreateChildControls()Render() 中实例化第三方控件。非常感谢!
    【解决方案2】:

    您应该创建一个用户控件(一个 ASCX 文件),它可以包含其他嵌套控件和标记。

    【讨论】:

    • 问题是显示数据的方式太多了,项目的布局和数量变化取决于数据库和用户帐户。
    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多