我有一个自己写的控件:
    #region 基本类
    /// <summary>
    /// 基本类
    /// </summary>
    [DefaultProperty("myText")]
    public class Div : Control
    {
        /// <summary>
        /// 通知运行时所在的页面
        /// </summary>
        /// <param name="e"></param>
        protected override void OnInit(EventArgs e)
        {
            Page.RegisterRequiresControlState(this);
            base.OnInit(e);
        }
        [CategoryAttribute("Appearance")]        /// <summary>
        /// 输出文本信息
        /// </summary>
        public string myText
        {
            get
            {
                String s = (String)ViewState["myText"];
                return ((s == null) ? String.Empty : s);
            }            set
            {
                ViewState["myText"] = value;
            }
        }        /// <summary>
        /// 设置css外调信息
        /// </summary>
        public string myClass
        {
            get
            {
                String s = (String)ViewState["myClass"];
                return ((s == null) ? String.Empty : s);
            }            set
            {
                ViewState["myClass"] = value;
            }
        }        /// <summary>
        /// 设置style
        /// </summary>
        public string myStyle
        {
            get
            {
                String s = (String)ViewState["myStyle"];
                return ((s == null) ? String.Empty : s);
            }            set
            {
                ViewState["myStyle"] = value;
            }
        }        /// <summary>
        /// 设置打开方式,不设置使用默认打开方式
        /// </summary>
        public string myTarget
        {
            get
            {
                String s = (String)ViewState["myTarget"];
                return ((s == null) ? String.Empty : s);
            }            set
            {
                ViewState["myTarget"] = value;
            }
        }        /// <summary>
        /// 指定连接路径
        /// </summary>
        public string myUrl
        {
            get
            {
                String s = (String)ViewState["myUrl"];
                return ((s == null) ? String.Empty : s);
            }            set
            {
                ViewState["myUrl"] = value;
            }
        }
        /// <summary>
        /// 设置调用的SQL字符串,请对照数据库填写
        /// </summary>
        public string mySql
        {
            get
            {
                String s = (String)ViewState["mySql"];
                return ((s == null) ? String.Empty : s);
            }
            set
            {
                ViewState["mySql"] = value;
            }
        }         protected override void Render(HtmlTextWriter writer)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Class, myClass);
            writer.RenderBeginTag(HtmlTextWriterTag.Div);
            writer.Write(myText);
            writer.RenderEndTag();
        }    }
    #endregion
现在想要做一个复合控件,将上面的控件,想要调用两个上面的Div作为子控件,可以对子控件进行属性设置和调用:    #region 显示切换标签
    /// <summary>
    /// 显示tab导航切换
    /// </summary>
    [ToolboxData("<{0}:Tabber runat=server></{0}:Tabber>")]    [ParseChildren(false),PersistChildren(true)]
    public class Tabber:Control
    {
        /// <summary>
        /// 设置主菜单
        /// </summary>
        [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
        public Div myHeader
        {
            get
            {
                Div head = (Div)ViewState["myHeader"];
                return ((head == null) ? new Div() : head);
            }            set
            {
                ViewState["myHeader"] = value;
            }
        }        /// <summary>
        /// 设置子菜单
        /// </summary>
        [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
        public Div myBody
        {
            get
            {
                Div body = (Div)ViewState["myBody"];
                return ((body == null) ? new Div() : body);
            }            set
            {
                ViewState["myBody"] = value;
            }
        }        protected override void Render(HtmlTextWriter writer)
        {
            writer.Write(myHeader.myText+myBody.myText);
        }    }
    #endregion前台调用代码:
        
<cbb:Tabber ID="Tabber1" runat="server">
        <myHeader myClass="TabTitle" myStyle="color: #FFFFFF;height: 24px;background-color: #0099ff;" runat="server" myText="这是一个导航主菜单"></myHeader>
        <myBody myClass="TabContent" myStyle="font-size: 12px;color: #333333;background-color: #99ccff;height: 30px;" runat="server" myText="这是一个导航子菜单"></myBody>
        </cbb:Tabber>结果没有提示错误,也没有内容显示出来,请大家帮忙修改一下,多谢!100分送上

解决方案 »

  1.   


            protected override void Render(HtmlTextWriter writer)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Class, myClass);
                writer.AddAttribute(HtmlTextWriterAttribute.Style, myStyle);
                writer.RenderBeginTag(HtmlTextWriterTag.Div);
                //插入head
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "TabTitle");
                    writer.AddAttribute(HtmlTextWriterAttribute.Style, myHeader.myStyle);
                    writer.RenderBeginTag(HtmlTextWriterTag.Div);
                    writer.Write(myHeader.myText);
                    writer.RenderEndTag();
                //插入body
                    writer.AddAttribute(HtmlTextWriterAttribute.Class, "TabContent");
                    writer.AddAttribute(HtmlTextWriterAttribute.Style, myBody.myStyle);
                    writer.RenderBeginTag(HtmlTextWriterTag.Div);
                    writer.Write(myBody.myText);
                    writer.RenderEndTag();
                writer.RenderEndTag();
            }
      

  2.   


            protected override void Render(HtmlTextWriter writer)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Class, myClass);
                writer.AddAttribute(HtmlTextWriterAttribute.Style, myStyle);
                writer.RenderBeginTag(HtmlTextWriterTag.Div);
                //插入head
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "TabTitle");
                    writer.AddAttribute(HtmlTextWriterAttribute.Style, myHeader.myStyle);
                    writer.RenderBeginTag(HtmlTextWriterTag.Div);
                    writer.Write(myHeader.myText);
                    writer.RenderEndTag();
                //插入body
                    writer.AddAttribute(HtmlTextWriterAttribute.Class, "TabContent");
                    writer.AddAttribute(HtmlTextWriterAttribute.Style, myBody.myStyle);
                    writer.RenderBeginTag(HtmlTextWriterTag.Div);
                    writer.Write(myBody.myText);
                    writer.RenderEndTag();
                writer.RenderEndTag();
            }
    直接将属性写在控件里得了