powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Code Render Blocks
3 сообщений из 3, страница 1 из 1
Code Render Blocks
    #33349954
mekesha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясните мне, пожалуйста, хоть вкратце, разницу между конструкциями <%= %> и
<%# %>


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Code Render Blocks
    #33350051
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.gotdotnet.ru/DotNet/FAQ/ASPNET/26483.aspx <%# %>
data-binding expression

<% %> code render block

<%= %> code declaration block

<script runat="server"> </script> server code declaration block

Блок <%# %> называется data-binding expression - выражение привязки к
данным. Код из этих блоков используется в методах-обработчиках события
DataBinding элемента, в теле которого блок был объявлен. Код этого метода
выглядит в общем случает так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public void __DataBind__controlX(object sender, System.EventArgs e)
{
// Объявляется переменная Container. Тип переменной зависит от
// того, в теле какого элемента используется выражение привязки.
// В данном случае, привязка осуществляется в ItemTemplate элемента
// DataGrid, для него атрибутом TemplateContainerAttribute был
// установлен класс контейнера DataGridItem. Если привязка
// происходит не в шаблоне, то тип переменной Container всегда
// будет System.Web.UI.Control.
//
System.Web.UI.WebControls.DataGridItem Container;
//
// Объявляется переменная target. Это объект, в теле которого
// используется блок привязки. Для шаблона, target - всегда
// DataBoundLiteralControl.
//
System.Web.UI.DataBoundLiteralControl target;
// инициализация переменных.
target = ((System.Web.UI.DataBoundLiteralControl)(sender));
Container = 
((System.Web.UI.WebControls.DataGridItem)(target.BindingContainer));
// выполнение кода привязки.
target.SetDataBoundString(0, (System.Convert.ToString(/*содержимое блока <%# 
%>*/));

// Если в коде страницы привязка была использована в виде
// attributeName='<%# someExpr %>', то предыдущий код будет выглядеть иначе:
//
// target.attributeName = ((<ожидаемый тип атрибута>)(someExpr));
//
}



В теле блока <%# %> можно свободно использовать переменные Container и
target. Следует помнить, что объявленные в странице свойства или поля с
такими именами будут перекрыты этими переменными в коде блока привязки
данных.


Блок <% %> и <%= %> называется code render block - блоки отображения. Код из
этих блоков складывается в методы-делегаты вызываемые на стадии Rendering
тех элементов, внутри которых данные блоки были размещены разработчиком.
Первый блок предназначен для внедрения в страницу кода, который можно
выполнить на этой стадии, и вовсе не обязательно должен как-то сказаться на
итоговом ее соджержимом, второй используется в виде <%= someExpr %> является
сокращением <% Response.Write(someExpr) %>. Здесь someExpr - это любое
выражение, которое будет обработано методом Write() класса HtmlTextWriter. В
теле блока <% %> допустимо объявлять переменные, тогда они будут локальными
для того метода, в котором данный блок будет реализован. В теле блока <% %>
нельзя объявлять методы или типы.



Блок <script runat="server"> </script> называется server code declaration
block - блок объявления кода. Содержимое данных блоков ASP.NET добавляет в
объявление класса страницы, при создании итоговой dll, соответственно в коде
блока должны быть только объявления методов, переменных, и классов, которые
будут доступны в коде всей страницы. Поскольку данный код содержится в
классе, наследуемом от класса страницы, объявленного в code-behind файле
(или непосредственно от System.Web.UI.Page), здесь можно переписывать
объявления виртуальных методов/свойств родительского класса.

Код во всех блоках выполняется в области видимости страницы: т.о. если
будет написано <% SomeProp = "SomePropValueStr" %> свойство SomeProp должно
быть объявлено либо здесь же, в странице, с помощью блока объявления кода, и
тогда область видимости SomeProp может быть любой, либо в code-behind файле,
и тогда область видимости SomeProp должна быть не меньше Protected.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Code Render Blocks
    #33350069
mekesha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> profil
Спасибо! Ваш пост помог с пониманием!


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Code Render Blocks
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]