自定义控件(8)处理标签间的内容ParseChildrenAttribute

来源:互联网 发布:大屏数据可视化 编辑:程序博客网 时间:2024/05/22 18:21

标签间的内容就是指开始标签与结束标签之间的代码。如<TextBox>我解析成了属性</TextBox>与<panel><Label></Label></panel>\

同样是标签间的内容,TextBox解析成了属性,Panel解析成了控件。我们怎样来定制对控件标签内容的解析行为呢。

我们可以利用ParseChildrenAttribute控制控件对其内容的解析行为,它有4个构造函数

(1)ParseChildren()                   ChildrenAsPropertiew属性默认为false

(2)ParseChildren(Boolean)      其中bool参数赋值给ChildrenAsProperties

(3)ParseChildren(Type)           其中Type参数将赋值给ChildControlType属性,以显示指定控件内可接受哪些类型的子控件。

(4)ParseChildren(Boolean,String)    两个参数分别赋给ChildrenAsProperties和DefaultProperty属性,DefaultProperty用于指定控件内容解析成哪个属性的值。

下面我们修改一下相册控件的代码,把控件内容解析成imgUrl属性

using System.Web.UI;using System.Web.UI.WebControls;namespace kjlx.BLL.PChildrenAttribute{    [ParseChildren(true,"imgUrl")]               //把控件内容解析为imgUrl属性   public class ParseChildrenTest:WebControl    {        /// <summary>        /// 定义属性        /// </summary>        public virtual string imgUrl        {            get            {                if (ViewState["imgUrl"] != null)                {                    return (string)ViewState["imgUrl"];                }                return string.Empty;            }            set { ViewState["imgUrl"] = value; }        }        protected override void Render(HtmlTextWriter writer)        {            //最外层div样式            writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign, "center");            writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "194px");            writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "194px");            writer.AddStyleAttribute("background", "url(images/background.gif) no-repeat left");            //最外层div开始            writer.RenderBeginTag(HtmlTextWriterTag.Div);            //img属性和样式            //应用_imgUrl            writer.AddAttribute(HtmlTextWriterAttribute.Src, this.imgUrl);            writer.AddAttribute(HtmlTextWriterAttribute.Width, "160px");            writer.AddAttribute(HtmlTextWriterAttribute.Height, "160px");            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "none");            writer.AddStyleAttribute(HtmlTextWriterStyle.Padding, "0px");            writer.AddStyleAttribute(HtmlTextWriterStyle.MarginTop, "16px");            //img开始            writer.RenderBeginTag(HtmlTextWriterTag.Img);            //img结束            writer.RenderEndTag();            //最外层div结束            writer.RenderEndTag();        }    }}
html代码

 <cc1:ParseChildrenTest ID="ParseChildrenTest1" runat="server" >images/Nature.jpg</cc1:ParseChildrenTest>

注意:标签内容不要留有空格

显示结果


我们也可以试试在button里面加一个textbox

代码

using System.Web.UI;using System.Web.UI.WebControls;namespace kjlx.BLL.PChildrenAttribute{    [ParseChildren(false,"Item")]    public class ParseChildrenTest3:WebControl    {        protected override System.Web.UI.HtmlTextWriterTag TagKey        {            get { return HtmlTextWriterTag.Button; }        }        public virtual TextBox Item        {            get            {                if(ViewState["Item"]!=null)                {                    return (TextBox)ViewState["Item"];                }                return null;            }            set { ViewState["Item"] = value; }        }        protected override void Render(HtmlTextWriter writer)        {            base.Render(writer);            writer.Write(Item);        }    }}

html代码

     

       <cc1:ParseChildrenTest3 ID="ParseChildrenTest3" runat="server" >              <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>        </cc1:ParseChildrenTest3 >

显示结果



阅读全文
0 0
原创粉丝点击