10

我正在使用 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>

4

5 回答 5

13

foreach是 ASP.NET MVC 的必经之路。为什么?我个人避免使用任何遗留asp:xxx控件 .. 因为它们可能具有 webforms 模型存在的臃肿。其次,event delegates你必须连接的所有东西呢?IMO,您开始混合和匹配架构,因此这可能会严重导致真正的意大利面条代码具有疯狂的维护和支持问题。(IMO:DataBinder.Eval == 非常邪恶 :( :( :( )

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

最后,foreach像许多人认为的那样,在 asp.net mvc 中做的不是意大利面条代码。我知道当我第一次看到最初的 mvc 演示时我做到了。如果有的话,它实际上使 UI 比以前更干净,imo .. 更易于维护。IMO,spagetti 代码是当你有很多<% .. %>做业务逻辑和 ui 逻辑和(gag)数据库访问时。请记住,这就是 peeps 在 asp.net经典的狂野西部所做的:P

概括

坚持foreach并避免使用任何网络表单控件——它很简单、非常有效并且非常有可能做到。

于 2008-12-07T11:35:54.513 回答
8

foreach如果您不专门搞砸的话,肯定会更快。Repeater当然更干净,更巧妙地将 UI 和逻辑分开。有时你需要更多的条件(除了不同的偶数行和奇数行)来正确渲染你的东西,这是foreach唯一的选择。

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

编辑:我说的是带有 WebControls 的普通 ASP.NET。对于 MVC 甚至大部分由代码生成的页面,我同意 foreach 更直接、更干净。

于 2008-12-07T11:02:02.990 回答
2

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

于 2008-12-07T11:40:02.803 回答
1
<p each="var item in ViewData.Model">${item.Name}</p>

嗯,美味的火花

于 2008-12-07T15:44:43.433 回答
0

这是另一种选择。我自己没有使用过这个,但看起来很有趣。

于 2008-12-07T15:13:49.033 回答