显然可以在 ASP.NET Web 表单页面和视图中使用
<%= %>
构造(渲染块)编写格式化输出。
<%= "{0} is {1}", "Foo", 42 %>
这将呈现“Foo is 42”。据我所知,ASP.NET 解析器将
<%= %>
转换为对 HttpResponse.Write(string)
的调用。显然,在上面的代码中,没有一对一的翻译,因为参数的数量不匹配(假设上面表达式中的 ,
分隔参数)。
TextWriter
有一个 Write(string, object[])
方法。
我已经检查了解析器的输出,确实它调用了
TextWriter
的方法,该方法接受 params object[]
参数进行格式化:
private void @__Renderform1(System.Web.UI.HtmlTextWriter @__w, System.Web.UI.Control parameterContainer) {
// ...
@__w.Write( "{0} is {1}", "Foo", 42 );
该行为是否记录在任何地方?
据我所知 ASP.NET 解析器将 <%= %> 转换为对 HttpResponse.Write(字符串)。
也许
<%= "{0} is {1}", "Foo", 42 %>
被翻译成Response.Output.Write(string format, params object[] arg)
,Output
属于TextWriter
类型,这就是解释
根据 http://www.hanselman.com/blog/ASPNETResponseWriteAndResponseOutputWriteKnowTheDifference.aspx
这是一个
<%= %>
嵌入式代码块,其存在是为了保持与经典 ASP 的兼容性。
如您所见,
<%= "{0} is {1}", "Foo", 42 %>
相当于:
string s = string.Format("{0} is {1}", "Foo", 42);
Response.Write(s);
该行为已记录在此处:
写入包含对象数组的文本表示形式的格式化字符串 到输出流,以及任何挂起的制表符间距。 此方法使用与 String.Format 方法相同的语义。 (重写 TextWriter.Write(String, Object[])。)
这里记录了代码渲染块调用 Write 方法。
最后,嵌入式代码块的语法已针对 .NET 4 进行了更新,如此处所述。
这很接近,也许相关http://msdn.microsoft.com/en-us/library/586y06yf.aspx但这并不能解释为什么<%= does it...