[ASP.NET入门随想十] 珍珠奶茶
                    ——服务器控件模型


[ASP.NET入门随想十] 珍珠奶茶 ——服务器控件模型

    他迷上了珍珠奶茶。说实话,以前他一直觉得珍珠奶茶挺蠢的,真不知道是那一个天才的点子,居然把粉圆和泡沫红茶搅和在一起,还加上一根那么滑稽的超大吸 管;妹妹刚迷上珍珠奶茶的时候,他还挺嗤之以鼻的呢。但这天以后,他几乎天天都会去买一杯珍珠奶茶,愈喝愈觉得珍珠奶茶的风味很特别,的确满好喝的。知道 他迷上珍珠奶茶,妹妹还笑他:“早跟你说好喝你不信,男生就是迟钝。”
—— 管家琪《珍珠奶茶的诱惑》
 
■ 面向对象的粉圆 – 服务器控件模型

    《随想九》 中我们已经认识到,XHTML的一个重要目标就是将结构与表现分离,如:<div id=”author”>老燕</div>;但从一个动态网站的角度来看,需要进一步将网页结构与内容分离,即:<div id=”author”><!—-动态数据--></div>,相比较而言,网页结构是静态,内容是动态。

    博客园中charly的《内容发布系统的开发》 引发我对一段往事的追忆,作者讨论的命题是如何用动态数据生成静态页面,方法是用数据替换模板中指定标签。引申开来就是ASP程序员非常久远的梦想——代 码与页面分离,即避免出现<div id=”author”><%=author%></div>之类HTML代码与ASP程序代码混杂在一块的情况,而解决 之道,用的就是charly描述的方法——正则表达式替换。
 
    如果用静态/动态这个角度去分析一个.aspx文件,可以将其分成两部份:一部份是静态的连续的文本,如:<html>……< body>;另一部份是动态的特殊标签,如:<asp:TextBox />。两者以是否拥有属性runat=”server”为判断标准。ASP.NET将后一部份称之为服务器控件,程序员以服务器控件为对象模型来定义Web应用程序的用户界面,控制用户交互;而前一部份在运行时也将被创建成一种特殊的控件——LiteralControl。


[ASP.NET入门随想十] 珍珠奶茶 ——服务器控件模型
// MyControls.cs 自定义控件集
using System;
using System.Web.UI;
namespace essay
{
    public class MyFirstControl:Control   //输出控件属性Number的绝对值
    { 

        private int _number;                   
        public int Number                 //定义属性
        {   

            get {return _number;}
            set {_number=value;}
        }
        //重写Control.Render方法,生成控件对应的HTML代码
        protected override void Render(HtmlTextWriter writer)
        {  
            writer.Write(Math.Abs(Number));
        }
    }
}
// TestMyControls.aspx页面文件,<%Register%>注册自定义控件集
// <mc: ……>在页面增加自定义控件并将属性Number值设为-1
<%@ Register TagPrefix="mc" Namespace="essay" Assembly="essay" %>
<HTML><HEAD></HEAD><body>
<form runat="server">
    <mc:MyFirstControl id="test1" Number="-1" runat="server" />
</form></body></HTML>

相关文章: