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 - это просто, очень эффективно и очень возможно.

Ответ 4

<p each="var item in ViewData.Model">${item.Name}</p>

Ммм, вкусный Искра.