FaKk2 писал(а):Что ты будешь делать, когда через пару месяцев тебе надо будет добавить, например, стиль к твоей ссылке, компилировать заново?
Я с тобой согласен, если речь идет о странице, элементы которых заранее размещены на странице. В этом случае, действительно, удобнее разместить контрол и задать его параметры кодом, а тот же стиль легко менять просто правкой aspx-файла.
Но я не зря выделил фразу о динамическом формировании контента страницы, когда заранее неизвестно ни количество элементов, ни вообще факт их наличия.
Возьмем пример. У нас есть база по отстроенным в каком-нибудь городе зданиям. Одна из страниц сайта отображает общую информацию о строении (начало строительста, окончание, количество квартир, информация о фирме-строителе и т.д.) и краткую информацию о каждой купленной квартире. Т.е. получается, что станица состоит из двух частей: с основной информацией и с таблицей произвольного вида, содержащей данные по купленным кватирам.
Вполне понятно, что предугадать количетсво "строк" нашей импровизированной таблицы заранее невозможно, поэтому страницу можно сделать следующим образом:
- Код: Выделить всё
<div id="content">
<div id="HouseInfo" runat="server">
тут заранее подготовленные, например, Label`ы или TextBox`ы для вывода информации и ссылка на сайт строительной компании
</div>
<div id="FlatsInfo" runat="server">
а здесь будет помещена нформация о квартирах
</div>
</div>
Ничего сложного.
С заполнением данный о доме проблем не будет, а вот по поводу информации о квартирах как раз и интересно узнать.
Создавать контент мы будем циклом:
- Код: Выделить всё
For each flat as FlatInfo in House.Flats
Next
но способов заполнения, опять же, несколько:
- использовать аккамулятор кода (StringBuilder), потом присвоение его значения к InnerHTML контейнера
- использование LiteralControl`ов для создания начала таблицы(table,thead,tr,...,/tr,/thead,tbody), ее строк (tr,...,/tr) и конца таблицы (/tbody,/table)
- а можно использовать объект Table и огромное количество объектов TableRow, TableCell, LinkButton, Label и т.д.
Возвращаясь к стилям следует заметить, что в любом из этих случаев, будь то присвоение стиля в шаблоне для LiteralControl`а или изменение свойства .CssClass у какого-либо объекта, правкой разметки из .aspx не обойтись.
Третий способ удобен, если не знаешь что писать в первых двух (если не знаешь HTML, понятия не имеешь что такое стандарты вообще, что такое
этот ваш XHTML). А как по мне, так создание огромного количества объетов-элементов таблицы может разве что, пусть и не значительно, снизить производительность, ведь каждый объект занимает место в памяти, у каждого вызывается процедура рендера, а тут все готово: уже готовый кусок полностью устраивающего пользователя кода, который просто надо вставить в определенный момент в определенное место страницы.
Roman Koff писал(а):Это противоречит идеологии ASP.NET. Самая существенная разница между ASP и ASP.NET - это какраз уход от явной сборки кода клиентской страницы.
Опять же соглашусь: в ASP.NET очень удобно пользоваться контролами и создавать свои, но в чем смысл использования
в вышеописанном случае именно контролов?
По поводу этого примера. Вообще можно было бы использовать что-то типа DetailesView`а, но его функционал не всегда достаточен. Например, для смены класса определенной ссылки (а не каждой аналогичной ей) придется все равно менять код: либо насильно приписывать определенному элементу ссылку (а при использовании шаблонов в таких контролах получить доступ к определенным элементам затруднительно), либо применяя правила наследования в CSS менять класс определенной "строке" контрола, что бы ссылки
.standart a.more_info и
.non-standart a.more_info отличались.