这个ASP.NET功能在哪里记录? <%=字符串格式,params object [] args%>

时间:2013-09-06 11:29:31

标签: asp.net parsing compiler-construction response.write server-tags

显然,可以使用ASP.NET网页表单页面和视图中的<%= %>构造(渲染块)编写格式化输出。

<%= "{0} is {1}", "Foo", 42 %>

这将使“Foo为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 );

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

3 个答案:

答案 0 :(得分:3)

  

据我所知,ASP.NET解析器转换&lt;%=%&gt;打电话给   HttpResponse.Write(字符串)。

也许<%= "{0} is {1}", "Foo", 42 %>被翻译为Response.Output.Write(string format, params object[] arg)Output属于TextWriter类型,这将是解释 根据{{​​3}}

答案 1 :(得分:3)

这是<%= %> embedded code block,用于保持与经典ASP的兼容性。

如您所见<%= "{0} is {1}", "Foo", 42 %>相当于:

string s = string.Format("{0} is {1}", "Foo", 42);
Response.Write(s);

记录了这种行为here

  

写入包含对象数组的文本表示的格式化字符串   到输出流,以及任何挂起的制表符间距。   此方法使用与String.Format方法相同的语义。   (重写TextWriter.Write(String,Object [])。)

Here是代码渲染块调用Write方法的地方。

最后,嵌入式代码块的语法已针对.NET 4进行了更新,如here所述。

答案 2 :(得分:-1)

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