Foreach или Repeater - что лучше?
Я создаю веб-сайт в ASP.Net, используя MVC, и вам нужно перечислить набор результатов. Обе следующие работы, как я хочу, но я задаюсь вопросом, что быстрее, чище и/или лучше - или если другой вариант будет более подходящим?
Примечание: ViewData.Model
имеет тип IEnumerable<Thing>
, и мне нужно отображать больше атрибутов, чем Name
. Я обрезал код для этого примера.
<% foreach (var thing in ViewData.Model)
{ %>
<p><%= thing.Name %></p>
<% }; %>
<% rptThings.DataSource = ViewData.Model;
rptThings.DataBind(); %>
<asp:Repeater ID="rptThings" runat="server">
<ItemTemplate>
<p><%# DataBinder.Eval(Container.DataItem, "Name") %></p>
</ItemTemplate>
</asp:Repeater>
Ответы
Ответ 1
foreach
определенно быстрее, если вы специально не испортили что-то. Repeater
, конечно, чище и более аккуратно отделяет интерфейс и логику. Иногда вам нужно больше условий (отличных от разных четных и нечетных строк) для рендеринга вашего материала, что делает foreach
единственным выбором.
Я лично предпочитаю Repeater
для нормальных ситуаций и foreach
для более сложных.
EDIT: Я говорил об простой ASP.NET с WebControls. Для MVC и даже страниц, которые в основном генерируются кодом, я согласен, что foreach более простой и понятный.
Ответ 2
foreach
- это путь ASP.NET MVC. Зачем? я лично избегаю каких-либо устаревших элементов управления asp:xxx
.. потому что они могут иметь раздутие, существующее с моделью webforms. Во-вторых, как насчет всего event delegates
, вам нужно подключиться? вы начинаете смешивать и сопоставлять архитектуры, IMO, поэтому это может серьезно привести к реальному коду спагетти с сумасшедшими проблемами поддержки и поддержки. (IMO: DataBinder.Eval == очень злой:(:(:()
Единственным asp:xxx
элементом управления я является mastpage / content control
(потому что альтернативы ему нет).
Наконец, выполнение foreach
в asp.net mvc не является кодом spagetti, как полагают многие. Я знаю, что сделал, когда впервые увидел начальную демонстрацию mvc. Во всяком случае, это на самом деле делает пользовательский интерфейс намного более чистым, чем раньше, imo.. гораздо более удобным. ИМО, код спагетти - это когда у вас есть много <% .. %>
, выполняющих бизнес-логику и логику ui и (gag) db-доступ. Помните, что то, что смотрели на диком западе от asp.net classic: P
Резюме
Придерживайтесь foreach
и избегайте использования каких-либо элементов управления webform - это просто, очень эффективно и очень возможно.
Ответ 3
Я использую повторитель метода расширения от Phil Haack. Лучшее обоих миров. http://haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx
Ответ 4
<p each="var item in ViewData.Model">${item.Name}</p>
Ммм, вкусный Искра.
Ответ 5
Здесь еще один вариант. Я не использовал это сам, но выглядит интересно.