Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > <%= %> в вэб-контролах


Автор: Bogdan1024 2.7.2008, 15:19
Объяснять долго. Посмотрите, пожалуйста, почему не работает.

Автор: Bogdan1024 5.7.2008, 22:51
Тупо нипанимаю. 
Переделал из 
Код

<asp:Label runat="server" ID="Label1" Text="<%= this.LabelText %>" />

В
Код

<asp:Label runat="server" ID="Label1">
<%= this.LabelText %>
<asp:Label />

И заработало. Тупо нипанимаю почему первый случай не работает. 
Ну ладно, хоть как-то, и то хорошо.
Если кто знает почему первым способом нельзя - пишите!

Автор: wotker 5.7.2008, 23:05
У меня так работает:
Код

<asp:Label ID="label2" runat="server" Text="11" ></asp:Label>
<asp:Label runat="server" ID="Label1" Text="<%# label2.Text %>" />


Автор: Bogdan1024 5.7.2008, 23:16
...у тебя работает, но не то smile

Автор: wotker 5.7.2008, 23:32
Хм.. я торможу smile 
а в чем разница? Что такое LabelText?

Автор: Bogdan1024 6.7.2008, 00:33
Тебе следовало скачать проект чтобы понять о чём речь. Ну да ладно.
LabelText - свойство WebControl'a, которое задаётся на странице.
<% %> - в этих чудо-скобках можно на странице писать код, который исполнится кажется в событии OnPreRender.
<%= %> - сокращёние. То же, что и Response.Write
<%# %> - датабиндиг smile 

Автор: wotker 6.7.2008, 01:04
Ага.. понятно
Цитата

<%= %> - сокращёние. То же, что и Response.Write

В первый раз такое увидел. Думал  '=' случайно закрался.
На мой взгляд использование этой конструкции чревато последствиями. 
Зачем изобретать какие-то хаки, если можно сделать более цивильным способом.
Более того раз мы позволяем вставлять любые выражения, как парсер должен обрабатывать такие конструкции?
Код

<asp:Label ID="Label1" runat="server" Text=<%= Label1.Text %> />

Автор: Bogdan1024 6.7.2008, 01:21
Цитата
Зачем изобретать какие-то хаки, если можно сделать более цивильным способом.

ИМХО это дико удобно. Таким конструкциям быть!

Автор: Idsa 6.7.2008, 09:49
Цитата(Bogdan1024 @  6.7.2008,  05:21 Найти цитируемый пост)
ИМХО это дико удобно. Таким конструкциям быть! 

Готов поспорить, что ты не программировал на PHP, чистом ASP или еще каком-нибудь языке, где embedded code - норма жизни. Даже самые заядлые PHP-шники обалдевают от ASP.NET'овского code behind. PHP'никам для некоторого подобия code behind приходится использовать Smarty (вроде так называется). Но это совсем не то...
Да я и сам после PHP'ного "macaronni code" был впечатлен code behind.
Embedded code, а вместе с ним и конструкции <%, <%= существуют в .NET для совместимости с чистым ASP: чтобы сильно не пугать программистов, переходящих на ASP.NET.

Добавлено через 14 минут и 37 секунд
Цитата(Bogdan1024 @  6.7.2008,  02:51 Найти цитируемый пост)
Если кто знает почему первым способом нельзя - пишите!

Конструкцию <%= нельзя использовать для установки свойств. Насколько я помню, она будет воспринята как строка.
Я вижу причину в том, что конструкция <%= выполняется на этапе рендеринга, поэтому было бы легкомысленно разрешать разработчикам использовать ее для установки свойств: на форумах была бы одна из популярнейших тем "почему я установил свойство через <%=, а оно не установилось" smile

Автор: PashaPash 6.7.2008, 10:41
Цитата(Idsa @  6.7.2008,  09:49 Найти цитируемый пост)
Embedded code, а вместе с ним и конструкции <%, <%= существуют в .NET для совместимости с чистым ASP: чтобы сильно не пугать программистов, переходящих на ASP.NET.
<%, <% - неотъемлимая часть asp.net, а не просто конструкции для совместимости. <%= очень удобна для привязки скриптов на странице к ClientID контролов, из CB это делать совершенно неудобно.
Из конструкций забыли про <%$ smile

Автор: wotker 6.7.2008, 10:47
Цитата

Конструкцию <%= нельзя использовать для установки свойств.

Цитата

<%= очень удобна для привязки скриптов на странице к ClientID контролов

мм. а здесь нет противоречия?

Автор: Idsa 6.7.2008, 10:49
Цитата(PashaPash @  6.7.2008,  14:41 Найти цитируемый пост)
<%, <% - неотъемлимая часть asp.net, а не просто конструкции для совместимости. <%= очень удобна для привязки скриптов на странице к ClientID контролов, из CB это делать совершенно неудобно.

Со скриптами, конечно, удобно... но это не более чем исключение, подтверждающее правило:
Цитата

Embedded code blocks are supported in ASP.NET Web pages primarily to preserve backward compatibility with older ASP technology. In general, using embedded code blocks for complex programming logic is not a best practice, because when the code is mixed on the page with markup, it can be difficult to debug and maintain. In addition, because the code is executed only during the page's render phase, you have substantially less flexibility than with code-behind or script-block code in scoping your code to the appropriate stage of page processing.


Добавлено через 27 секунд
Цитата(PashaPash @  6.7.2008,  14:41 Найти цитируемый пост)
Из конструкций забыли про <%$

А мы их в соседней теме рассматривали smile

Добавлено через 3 минуты и 18 секунд
Цитата(wotker @  6.7.2008,  14:47 Найти цитируемый пост)
мм. а здесь нет противоречия?

Нет. Здесь немного не то имеется в виду.
<script language="javascript">
   var control = document.getElementById('<%= this.SomeControl.ClientId %>');
</script>

Автор: Bogdan1024 6.7.2008, 11:18
Цитата
Готов поспорить, что ты не программировал на PHP, чистом ASP или еще каком-нибудь языке, где embedded code - норма жизни. Даже самые заядлые PHP-шники обалдевают от ASP.NET'овского code behind. PHP'никам для некоторого подобия code behind приходится использовать Smarty (вроде так называется). Но это совсем не то...

Ты проспорил, я программил и на ASP и на PHP  smile 
Цитата
Конструкцию <%= нельзя использовать для установки свойств. Насколько я помню, она будет воспринята как строка.

Можно. Могу выложить пример где такая привязка работает.
Цитата

Я вижу причину в том, что конструкция <%= выполняется на этапе рендеринга, поэтому было бы легкомысленно разрешать разработчикам использовать ее для установки свойств: на форумах была бы одна из популярнейших тем "почему я установил свойство через <%=, а оно не установилось" smile

Ну дык, вот одна тема уже есть smile
Цитата
<%, <% - неотъемлимая часть asp.net, а не просто конструкции для совместимости. <%= очень удобна для привязки скриптов на странице к ClientID контролов, из CB это делать совершенно неудобно.

Вот-вот smile
Цитата
Из конструкций забыли про <%$ 

Аналогично, тоже дико удобно!

Автор: Idsa 6.7.2008, 11:33
Цитата(Bogdan1024 @  6.7.2008,  15:18 Найти цитируемый пост)
Можно. Могу выложить пример где такая привязка работает.

Ага, давай.

Цитата(Bogdan1024 @  6.7.2008,  15:18 Найти цитируемый пост)
Ты проспорил, я программил и на ASP и на PHP

Надо было на что-нибудь спорить smile

Цитата(Bogdan1024 @  6.7.2008,  15:18 Найти цитируемый пост)
Аналогично, тоже дико удобно!

Удобно? Ну, конечно, удобно! НО! Embedded code удобен до поры до времени. Как только проект разрастается, в этом макаронном коде становится невозможно разобраться. К тому же еще могут начаться проблемы из-за того, что <%= и <%$ выполняются на этапе рендеринга, и поэтому их нельзя считать в том же Page_Load. Ну не спроста даже PHP'ники уже практически не пишут inline код!

Автор: PashaPash 6.7.2008, 17:22
Idsa, ASP.NET codebehind - это нестрогая реализация MVC. Поэтому код, относящийся ко view, лучше писать в aspx, а не в code behind. Иначе макароны не разделяются, а просто переносятся в .aspx.cs.
Цитата(Idsa @  6.7.2008,  11:33 Найти цитируемый пост)
К тому же еще могут начаться проблемы из-за того, что <%= и <%$ выполняются на этапе рендеринга, и поэтому их нельзя считать в том же Page_Load. Ну не спроста даже PHP'ники уже практически не пишут inline код! 
<%$ отрабатывает до Load. И использование ее для работы с ресурсами вполне оправдано - контроллер вообще не должен заниматся локализацией вида. А вот без <% и <%= можно и нужно обойтисьsmile

Автор: Bogdan1024 8.7.2008, 15:31
Цитата

Цитата
Можно. Могу выложить пример где такая привязка работает.

Ага, давай.

Таки не могу smile Там был код в стиле <a href="<%= ...%>">...</a>, но дык это ж совсем другое дело. Я неплохо перепутал smile
Так что действительно таким образом присваивать значения свойствам нельзя, и инструкции <% %>  - это зло smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)