日期:2010-02-20 浏览次数:20461 次
不过这个话题的适用范围很广,因为即使是目前最新的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) { ... } } |
<%= expression %> |
首先是<%= %>标记。<%= %>标记内包含的是一个“表达式”,因此它不能以分号结尾。表达式内部的数据就会直接写入writer。例如这样的标记:
<%= DateTime.Now %> |
在编译过后就成为:
writer.Write(DateTime.Now) |
与<%= %>标记不同,<% %>标记中间其实包含的是“语句”。语句自然可以有多行,自然每行最后需要有分号,这就像我们平时写C#代码那样。不过实际上,语句的功能其实并不是为了“输出内容”,而是用来“控制逻辑”。例如,您在页面上写了这样的代码:
<% Func<int, bool> odd = i => i % 2 != 0; %> |
这样就相