Почему репитеры в ASP.NET?
Я парень Ruby on Rails/PHP, и моя компания заставила меня работать с ASP.NET. Это не так уж плохо, я рад узнать новый язык, но так как я начал работать с этой технологией, все беспокоят меня о ретрансляторах.
Дело в том, что я полностью не вижу смысла: что лучше использовать ретранслятор, чем просто показывать вещи в цикле? Могу ли я пойти в адский программист для этого?
В рельсах я бы сделал...
контроллер
@types= Type.find(:all)
Вид
<%@types.each do |t| %>
<%= t.name %> <%= link_to "view", t%>
<%end%>
В ASP.NET я бы сделал:
атрибуты класса контроллера
protected List<Type> _types = null;
класс контроллера PageLoad
_types = MethodThatGetTypeFromDB();
Вид
<% foreach (var tin _types){%>
<%= t.name %>
<%}%>
Нет повторителей, но код чист, сух и уважает AP MVC. Я не создаю методы повсюду для обработки ItemDataBound
или что-то еще. Итак, что это за идея? Я единственный, кто находит, что повторители - это боль, которую нужно настроить, и не стоит того, что они приносят?
Я думаю, что я просто не понимаю эту идею.
Я не, пытаясь запустить боевые рельсы против мира, это просто то, что я знаю лучшее, так что это парадигма, которую я пытаюсь найти, когда я разрабатываю, Я думаю, что это более удобно, и я привык к этому, но если кто-то идет "Повторители хороши, потому что A, B и C, делать то, что вы делаете, ужасно, потому что D, E и F", то я это признаю и измените мой подход.
Ответы
Ответ 1
Ретрансляторы прекрасно вписываются в подход, основанный на использовании кода. Я провел много лет, когда я не мог выдержать какой-либо код в разметке. Весь код принадлежал коду, отделенному от разметки. Это было в значительной степени реакцией на ужасные беспорядки, с которыми я столкнулся в классическом ASP.
Теперь с ASP.Net MVC, я нахожу, что вернусь к тому, что вы описали выше. Но мне трудно преодолеть инстинкт, чтобы разделить разметку и код.
Изменить: Вот статья из 2003 года о дебатах относительно кода.
Ответ 2
Microsoft часто пытается максимизировать то, что вы можете сделать без кодирования. Вы можете много сделать с ретрансляторами без каких-либо кодов. С помощью элементов управления источниками данных вы можете делать многое без какого-либо кода. Можно предположить, что в качестве корпоративной стратегии они хотят иметь самую легкую в использовании среду разработки, а "никакого кода вообще" - это, по-видимому, какое-то определение прост в использовании.
Но когда вы хотите выйти за рамки бесплатных автоматических поведений, вы находитесь в коленях в модели событий с множеством извилистых проходов, которые все выглядят одинаково. Я увлекаюсь девизом perl, "делаю простые вещи простыми и трудными", и Microsoft иногда предпочитает "делать простые вещи тривиальными и все остальное".
Некоторые упомянули, что ASP.Net MVC отходит от этого. Если это правда, это лучшая новость, которую я слышал весь день.
Ответ 3
Ну, во-первых, он считал, что плохая форма слишком часто использует "<% code here% > " в ASP.NET, что в основном возврат к старым дням asp. Он перемежает код и дисплей, что затрудняет чтение страницы.
Таким образом, если вы работаете с кодом, вам нужно создать теги сервера или теги html, назначить их динамически и т.д., и в итоге вы получите гораздо больше кода, чем если бы вы только что использовали ретранслятор.
Повторители также упрощают использование встроенной глобализации .NET, поскольку большая часть их текста автоматически добавляется в файлы resx через инструмент "Создать локальный ресурс" в режиме VS Design. Это также позволяет избежать возможности недопустимых окон просмотра, вызванных созданием тегов для кода.
Изменить (в ответ на комментарий):
Встроенная в .NET глобализация использует файлы ресурсов (.resx) для хранения частей страницы (обычно это текст), таких как заголовок страницы, свойства тегов и все, что может быть глобализовано.
Затем вы создаете дополнительный файл resx для каждого поддерживаемого вами языка (французский будет "pagename.aspx.fr.resx", испанский будет "pagename.aspx.es.resx" и т.д.), а .NET определит пользовательский язык браузера во время выполнения и использовать строки из файлов resx (начиная с самого конкретного, что может и снижается до значения по умолчанию) для замены свойств на тегах сервера.
Например, если у вас есть тег сервера с текстом "Hello", создайте файл ресурсов (у Visual Studio есть инструмент, который сделает это автоматически для вас), и переведите его на французский, любой пользователь, чтобы посетить ваш сайт со своим языком браузеров на французском языке вместо этого увидит "Bonjour".
Вам нужно будет написать код для этого вручную, если вы откажетесь самостоятельно, поэтому, если многоязычность вызывает беспокойство в вашем проекте, возможно, что серверные элементы .NET - это путь.
Ответ 4
Я думаю, что основной целью ретрансляторов является сохранение процедурного кода из представления/разметки. Идея состоит в том, что кто-то, кто является графическим/эстетическим дизайнером, может войти и изменить разметку, не зная, как "закодировать". Наверное, для вас большая проблема в том, что многие люди в мире .NET знакомы с ретранслятором, что означает, что им будет легче поддерживать.
Ответ 5
Метод веб-разработки Asp.Net отличается от Rails тем, что традиционный ASP.Net не основан на MVC. Вы можете использовать MVC с использованием традиционного ASP.Net, однако это сложно и неуклюже (обычно). Это то, что приводит к структуре ASP.Net MVC, чтобы заполнить это пространство.
Повторитель был хорошим контролем для традиционного ASP.net, поскольку он обеспечивал лучшую производительность и больше возможностей, чем другие элементы управления данными. В некоторых случаях он также обеспечивал лучшую разметку. Как говорили другие, он обеспечивает много инфраструктуры, а также четкое разделение между надстройкой и кодом.
Нет ничего плохого в том, что вы делаете; однако, если вы используете традиционный ASP.Net, а не ASP.Net mvc, тот, кто поддерживает код после того, как вы не можете быть слишком счастливы.
Ответ 6
Причина повторителей вместо цикла сводится к основным различиям в философии кодирования. Хотя цикл в коде, конечно, не отправит вас программистам ада, он просто может отправить вас в аддон ASP.NET, потому что он нарушает разделение HTML-кода и данных.
Ответ 7
Основное преимущество репитера заключается в том, что вы создаете несколько элементов управления ASP.NET внутри указанных циклов.
Но для большинства его применений это просто другой способ сделать именно то, что вы делаете.
Ответ 8
-
Код в ASPX в основном декларативный/разметка. Это, как правило, легче поддерживать особенно членами команды без сильного программирования. Работа с разметкой также помогает разделить проблемы (например, MVC).
-
Если вы используете .Net 3.5, я считаю, что ретрансляторы в основном заменены на ListView.
Ответ 9
Я думаю, что то, что вы найдете в ASP.NET Web Controls, заключается в том, что они предоставляют множество инфраструктуры.
В вашем случае использования цикл for может быть совершенно точным.
Но для более сложных проблем форматирования и методов разработки может быть полезно, чтобы объект (ретранслятор) обернул все функциональные возможности вашего цикла for и предоставил массу дополнительных функций в коде, поддерживаемом Intellisense.
Ответ 10
Если вы используете asp.net MVC и им говорят использовать ретранслятор, человек, говорящий вам сделать это, вероятно, является классическим персонажем ASP.net.
В MVC единственными элементами управления, которые вы должны использовать, являются <asp:ContentPlaceHolder>
и использование пользовательских элементов управления вместо render :partial => "foo"