老赵前日的这篇博文讲的是有关ASP.NET WebForm页面内容输出方式的内容。尽管这个话题很老,不过 在ASP.NET MVC中同样适用,而且适用的情况有增无减,因此十分重要。希望这篇文章能够帮助你更好的 理解ASP.NET WebForm页面内容输出的细节。
这次我们谈的话题是“WebForm页面上输出内容的方式”。这其实是一个非常旧的话题了,因为本文的 内容甚至可以运用于ASP.NET 1.1之上。不过这个话题的适用范围很广,因为即使是目前最新的ASP.NET MVC框架,它的默认视图引擎依旧是基于ASP.NET WebForm的(如Page,Control,MasterPage)。甚至说 ,由于ASP.NET MVC框架的特性,我们会遇到更多在页面上“直接输出”内容的情况。因此,这个话题在 ASP.NET MVC应用中可能由为重要。
那么就拿ASP.NET MVC举例吧。假如,我们在页面上生成一个Partial View,我们可以这么做:
<
% Html.RenderPartial("MyPartialView"); %
>
然而,在前一篇文章中我们提出了一个新的方法Partial,它返回一个字符串,它可以在页面上这样使 用:
<
%= Html.Partial("MyPartialView") %
>
一个aspx页面会被编译成Page类的一个子类,这个子类的主要“功能”是覆盖了基类的Render方法:
public
class
MyPage : Page
{
protected
override
void
Render(HtmlTextWriter writer)
{
...
}
}
我们平时在aspx页面中编写的大量内容,其实都会变成操作writer的代码。例如使用writer.Write方 法输出内容,或者把writer交给子控件的Render方法用于生成内容。那么,以上两种页面上的标记分别又 是如何操作writer的呢?
<
%= expression %
>
首先是< %= %>标记。< %= %>标记内包含的是一个“表达式”,因此它不能以分号结尾 。表达式内部的数据就会直接写入writer。例如这样的标记:
<
%= DateTime.Now %
>
在编译过后就成为:
writer.Write(DateTime.Now)