in

SDT Community Server

SDT Forums, Blogs, Photos server.

wego

ASP.NET 自定义控件之解析标签内属性内嵌

实现如下:

<smic:Note runat=server ID='NoteInfo'>
     <b>Development Tools</b>
     <br />
     C#, JAVA, PHP
</smic:Note>

代码片段:

[ToolboxBitmap(typeof(Label))]
[AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[ToolboxData("<{0}:Note runat=\"server\"></{0}:Note>"), DefaultProperty("Message"), ParseChildren(false), Designer("System.Web.UI.Design.WebControls.LabelDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
[ControlBuilder(typeof(LabelControlBuilder)), ControlValueProperty("Message"), DataBindingHandler("System.Web.UI.Design.TextDataBindingHandler, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public class Note : WebControl
{

        [PersistenceMode(PersistenceMode.InnerDefaultProperty), Bindable(true), Localizable(true)]       
        public string Message
        {
            get { return ViewState["Message"] as string; }
            set { ViewState["Message"] = value; }
        }

        protected override void AddParsedSubObject(object obj)        // 必须 Override WebControl 的 AddParsedSubObject 方法
        {
            if (this.HasControls())
            {
                base.AddParsedSubObject(obj);
            }
            else if (obj is LiteralControl)
            {
                this.Message = ((LiteralControl)obj).Text;
            }
            else
            {
                string message = this.Message;
                if (message.Length != 0)
                {
                    this.Message = string.Empty;
                    base.AddParsedSubObject(new LiteralControl(message));
                }
                base.AddParsedSubObject(obj);
            }
        }

        protected override void Render(HtmlTextWriter output)
        {
            output.AddAttribute("class", "container");
            output.RenderBeginTag(HtmlTextWriterTag.Div);
            output.Write(this.Message);
            output.RenderEndTag();            
        }

}

 

 

 

 

Comments

No Comments
Copyright SDT, 2006-2009. All rights reserved.