Где задокументирована эта функция ASP.NET? <% = строковый формат, объект params [] 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 );
Это поведение задокументировано где-нибудь?
3 ответа
Насколько я знаю, анализатор ASP.NET преобразует <% =%> в вызов HttpResponse.Write(string).
Может быть <%= "{0} is {1}", "Foo", 42 %>
переводится на Response.Output.Write(string format, params object[] arg)
, Output
быть типом TextWriter
что будет объяснением в соответствии с http://www.hanselman.com/blog/ASPNETResponseWriteAndResponseOutputWriteKnowTheDifference.aspx
Это <%= %>
встроенный блок кода и существует для обеспечения совместимости с классическим 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, как описано здесь.
Это близко и, возможно, связано http://msdn.microsoft.com/en-us/library/586y06yf.aspx но это не объяснение, почему <% = делает это...