foreach или Repeater - что лучше? - PullRequest
       25

foreach или Repeater - что лучше?

10 голосов
/ 07 декабря 2008

Я строю веб-сайт в 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>

Ответы [ 5 ]

12 голосов
/ 07 декабря 2008

foreach - это путь для ASP.NET MVC. Зачем? Я лично избегаю любых устаревших asp:xxx элементов управления .. потому что они могут иметь раздувание, которое существует с моделью веб-форм. Во-вторых, как насчет всех event delegates, которые вам нужно подключить? вы начинаете смешивать и сопоставлять архитектуры, IMO, так что это может серьезно привести к реальному коду спагетти с безумным обслуживанием и проблемами поддержки. (IMO: DataBinder.Eval == очень злой :( :( :()

Единственный элемент управления asp:xxx, который я использую, - это mastpage / content control (потому что альтернатив ему нет).

Наконец, выполнение foreach в asp.net mvc НЕ является кодом spagetti, как полагают многие. Я знаю, что сделал, когда впервые увидел демо Mvc. Во всяком случае, это на самом деле делает пользовательский интерфейс намного более чистым, чем раньше, и даже намного более легким в обслуживании. IMO, spagetti-код - это когда у вас много <% .. %>, занимающихся бизнес-логикой и логикой пользовательского интерфейса и (gag) доступом к БД. Помните, это то, что делали люди на диком западе asp.net classic : P

Резюме

Придерживайтесь foreach и избегайте использования каких-либо элементов управления веб-формы - это просто, очень эффективно и очень возможно.

7 голосов
/ 07 декабря 2008

foreach определенно быстрее, если вы специально ничего не облажаете. Repeater, конечно, чище и более аккуратно разделяет интерфейс и логику. Иногда вам нужно больше условий (отличных от четных и нечетных строк), чтобы правильно визуализировать ваши вещи, что делает foreach единственным выбором.

Лично я предпочитаю Repeater для обычных ситуаций и foreach для более сложных.

РЕДАКТИРОВАТЬ: я говорил о простом ASP.NET с WebControls. Для MVC и даже для страниц, которые в основном генерируются кодом, я согласен, что foreach является более простым и понятным.

2 голосов
/ 07 декабря 2008

Я использую ретранслятор метода расширения от Фила Хаака. Лучшее из обоих миров. http://haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx

1 голос
/ 07 декабря 2008
<p each="var item in ViewData.Model">${item.Name}</p>

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

0 голосов
/ 07 декабря 2008

Вот другой вариант . Я сам этим не пользовался, но выглядит интересно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...