Где эта функция ASP.NET документирована? <% = строковый формат, params object [] args%>
По-видимому, можно писать форматированный вывод, используя конструкцию <%= %>
(блок рендеринга) на страницах и представлениях веб-форм ASP.NET.
<%= "{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
Насколько я знаю, парсер 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
Ответ 2
Это <%= %>
встроенный блок кода и существует для обеспечения совместимости с классическим ASP.
Как вы видели, <%= "{0} is {1}", "Foo", 42 %>
эквивалентен:
string s = string.Format("{0} is {1}", "Foo", 42);
Response.Write(s);
Это поведение документировано здесь:
Записывает форматированную строку, содержащую текстовое представление массива объектов к выходному потоку вместе с любым незавершенным интервалом вкладок. Этот метод использует ту же семантику, что и метод String.Format. (Переопределяет TextWriter.Write(String, Object []).)
Здесь указано, что код Render Block вызывает метод Write.
Наконец, синтаксис для встроенных кодовых блоков был обновлен для .NET 4, как описано здесь.
Ответ 3
Это близко и возможно связано с http://msdn.microsoft.com/en-us/library/586y06yf.aspx, но это не объяснение, почему <% = делает это...