Welcome 微信登录

首页 / 网页编程 / ASP.NET / ASP.NET WebForm页面内容输出的细节分析

ASP.NET WebForm页面内容输出的细节分析2011-08-06 博客园 老赵老赵前日的这篇博文讲的是有关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)