В чем практическая разница между Response.Write и <% =%>?

Я столкнулся с проблемой, из-за которой сторонний компонент мешает работе Response.Write и вызывая любой контент в Response.Write("") сделать перед любым другим html. Например:

<html><head><title><% Response.Write("HELLO WORLD") %>

будет отображаться как

HELLO WORLD<html><head>...

Тем не менее, любой контент, представленный с использованием <%= %> блоки будут работать правильно. Код ниже будет работать отлично:

<html><head><title><%="HELLO WORLD"%>

Я всегда предполагал, что <%= был просто стенографией для Response.Write, Из того, что я смог найти на MSDN, теперь я понимаю, что это <%= в конечном итоге преобразуется в Response.Write, но, очевидно, между ними есть несколько шагов.

Есть ли у кого-нибудь догадки о том, почему эти два будут отображаться по-разному, или укажет мне на некоторую документацию / информацию, которая объясняет, как <%= %> блоки обрабатываются?

Обновление. Элементом управления, вызвавшим проблему, был элемент управления Telerik AjaxManager, выпущенный в первом квартале 2009 года. Обновление до контроля Q2 решило проблему.

К сожалению, у меня нет доступа к источнику, поэтому я не смог выяснить, почему контроль вызвал такое поведение. Проблема была решена, но мне все еще очень любопытно, почему она вообще существовала.

1 ответ

Решение

<% = "foo"%> превращается в Response.Write("foo"); как только это скомпилировано. В этом можно убедиться, покопавшись в папке временных файлов ASP.NET и используя Reflector для декомпиляции найденных вами dll.

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