В чем практическая разница между 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.