我正在使用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>
答案 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
用于更复杂的情况。
答案 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。我自己没有用过,但看起来很有趣。