【发布时间】:2013-09-10 11:52:05
【问题描述】:
显然可以在 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 );
这种行为是否记录在任何地方?
【问题讨论】:
-
+1 教我一些新东西。
-
@Heinzi 第一次看到它,我认为它一定是一个错误,也是因为 ReSharper 用警告突出显示它“方法'__ReSharper_Render'有 1 个参数,但用 3 个参数调用( s)“预期表达式”。
-
这只是经典的 M$FT。我已经在他们的堆栈上构建应用程序 13 年了,这样的东西似乎总是会出现。我不得不说,在开源社区中,你几乎从来没有见过这样的东西,它没有在任何地方记录。可能很难导航,因为您永远不知道要使用哪个库,但它们已记录在案。
标签: asp.net parsing compiler-construction response.write server-tags