18

显然,可以使用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 );

这种行为是否记录在任何地方?

4

3 回答 3

3

据我所知,ASP.NET 解析器将 <%= %> 转换为对 HttpResponse.Write(string) 的调用。

也许将<%= "{0} is {1}", "Foo", 42 %>被翻译为类型Response.Output.Write(string format, params object[] arg),这将是根据http://www.hanselman.com/blog/ASPNETResponseWriteAndResponseOutputWriteKnowTheDifference.aspx的解释OutputTextWriter

于 2013-09-06T12:15:07.917 回答
3

这是一个<%= %> 嵌入式代码块,存在以保持与 Classic 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 进行了更新,如此所述。

于 2013-09-06T12:49:45.623 回答
-1

这很接近并且可能与http://msdn.microsoft.com/en-us/library/586y06yf.aspx相关,但这不能解释为什么 <%= 会这样做......

于 2013-09-06T12:13:38.007 回答