而HtmlTextWriter是什么东东呢?查一下MSDN,可以看到它们于System.Web.UI命名空间中,其解释是“在 Web 窗体页上写出一系列连续的 HTML 特定字符和文本。此类提供 ASP.NET 服务器控件在将 HTML 内容呈现给客户端时所使用的格式化功能”。 回到页面模型,每个控件实例化时都会默认调用OnInit方法(引发Init事件),在此过程中可以重载OnInit方法来添加自己的初始化逻辑。然后就到了实现有状态的WEB程序的最重要的几步,最先是页面自动调用TrackViewState方法,跟踪视图状态的更改,并保存到控件的StateTag对象中。如果是回传,则会调用LoadViewState方法,用来恢复ViewState字典,像TextBox这样实现了IPostBackDataHandler接口,则会通过LoadPostData方法更新控件数据状态。再接送就是加载(load),这时所有控件的所有最后状态已经保留。下一步如果是回传,则会触发RaisePostDataChangedEvent方法,如果不是,则进入PreRender,然后保存视图状态,生成控件(Render),卸载(Unload)(清除工作),释放(Dispose)(释放所有资源)。 至此,页面处理完成,处理程序会将生成的HTML流输出到客户端。