foreach或Repeater - 哪个更好?

时间:2008-12-07 10:59:09

标签: c# asp.net-mvc loops

我正在使用MVC在ASP.Net中构建一个网站,并且需要列出一组结果。以下两项工作正如我所希望的那样,但我想知道哪种更快,更清洁和/或更好 - 或者如果另一种选择完全更合适?

注意: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 个答案:

答案 0 :(得分:12)

foreach是ASP.NET MVC的方法。为什么?我个人避免任何遗留asp:xxx控件..因为它们可能存在与webforms模型一起存在的膨胀。其次,你必须连线的所有event delegates怎么办?你开始混合和匹配架构,IMO,所以这可能会严重导致真正的spagetti代码与疯狂的维护和支持问题。 (IMO:DataBinder.Eval ==非常邪恶:( :( :()

我使用的唯一asp:xxx控件是mastpage / content control(因为没有替代品)。

最后,在asp.net mvc中执行foreach不是spagetti代码,正如许多人所认为的那样。我知道当我第一次看到最初的mvc演示时我做了。如果有的话,它实际上使UI比以前更清洁,imo ..更加可维护。 IMO,spagetti代码就是当你有很多<% .. %>做业务逻辑和ui逻辑和(gag)db访问时。请记住,这就是窥视在asp.net classic 的狂野西部所做的事情:P

摘要

坚持foreach并避免使用任何网络表单控件 - 它简单,高效且非常可行。

答案 1 :(得分:7)

foreach肯定更快,如果你没有特别搞砸了什么。当然,Repeater更清晰,更清晰地区分UI和逻辑。有时你需要更多的条件(除了不同的偶数和奇数行)才能正确渲染你的东西,这使foreach成为唯一的选择。

我个人更喜欢Repeater用于正常情况,foreach用于更复杂的情况。

编辑:我在谈论使用WebControls的普通ASP.NET。对于MVC甚至是主要由代码生成的页面,我同意foreach更简单,更清晰。

答案 2 :(得分:2)

我使用Phil Haack的扩展方法转发器。两全其美。 http://haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx

答案 3 :(得分:1)

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

嗯,好吃Spark

答案 4 :(得分:0)

这是another option。我自己没有用过,但看起来很有趣。