mytemplate.cs

来自「这是《ASP.NET编程实作教程》一书中的源文件 如果有此书的朋友不防下载过来参」· CS 代码 · 共 80 行

CS
80
字号
using System;
using System.Web;
using System.Web.UI;

namespace myControl {

    //定义模板容器
    public class TemplateItem : Control, INamingContainer {
        private String     _message         = null;

        public TemplateItem(String message) {
            _message = message;
        }

        public String Message {
           get {
              return _message;
           }
           set {
              _message = value;
           }
        }
    }

    [
        ParseChildren(true)
    ]
    //定义模板类
    public class myTemplate : Control, INamingContainer {

        
        private ITemplate  _messageTemplate = null;
        private String     _message         = null;

        public String Message {
           get {
              return _message;
           }
           set {
              _message = value;
           }
        }

        [
            PersistenceMode(PersistenceMode.InnerProperty),
            TemplateContainer(typeof(TemplateItem))
        ]
        //模板类的ITemplate属性
        public ITemplate MessageTemplate {
           get {
              return _messageTemplate;
           }
           set {
              _messageTemplate = value;
           }
        }

        //重载的DataBind方法
        public override void DataBind() {
            EnsureChildControls();
            base.DataBind();
        }
        
        //重载的CreateChildControls方法
        protected override void CreateChildControls() {
        	
           //如果模板已经被创建,使用它来创建子控件,否则添加一个LiteralControl控件
           if (MessageTemplate != null) {
              Controls.Clear();
              TemplateItem i = new TemplateItem(this.Message);
              MessageTemplate.InstantiateIn(i);
              Controls.Add(i);
           }
           else {
              this.Controls.Add(new LiteralControl(this.Message));
           }
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?