此 ASP.NET 功能记录在哪里? <%= string format, params object[] args %>

问题描述 投票:0回答:3

显然可以在 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 parsing response.write server-tags
3个回答
3
投票

据我所知 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


3
投票

这是一个

<%= %>
嵌入式代码块,其存在是为了保持与经典 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 进行了更新,如此处所述。


-1
投票

这很接近,也许相关http://msdn.microsoft.com/en-us/library/586y06yf.aspx但这并不能解释为什么<%= does it...

© www.soinside.com 2019 - 2024. All rights reserved.