2009-08-27 1 views
3

У меня возникла проблема, когда сторонний компонент, по-видимому, вмешивается в Response.Write и вызывает отображение любого содержимого в пределах Response.Write("") перед любым другим html. Например:Какова практическая разница между Response.Write и <%= %>?

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

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

HELLO WORLD<html><head>... 

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

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

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

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

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

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

+0

Какой из сторонних компонентов вы используете? – madcolor

+0

Эта проблема действительно не имеет смысла ... Никогда не случилось со мной ... – voyager

+0

@voyager, я полностью согласен; это не имеет никакого смысла. Я бы поставил под сомнение мое здравомыслие, но другой разработчик смог воспроизвести поведение на своей локальной машине (тот же проект); @madcolor Множество элементов управления Telerik (ajax, модальное всплывающее окно, сетка); –

ответ

6

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