in

SDT Community Server

SDT Forums, Blogs, Photos server.

wego

September 2008 - Posts

  • 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();            
            }

    }

     

     

     

     

Copyright SDT, 2006-2009. All rights reserved.