Где задокументирована эта функция 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 но это не объяснение, почему <% = делает это...

Другие вопросы по тегам