【问题标题】:foreach or Repeater - which is better?foreach 或 Repeater - 哪个更好?
【发布时间】:2008-12-07 10:59:08
【问题描述】:

我正在使用 MVC 在 ASP.Net 中构建一个网站,并且需要列出一组结果。以下两项都可以按我的意愿工作,但我想知道哪个更快、更清洁和/或更好 - 或者另一个选项是否更合适?

注意:ViewData.ModelIEnumerable<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>

【问题讨论】:

    标签: c# asp.net-mvc loops


    【解决方案1】:

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

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

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

    总结

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

    【讨论】:

    • The only asp:xxx control i use is the mastpage / content control(because there are no alternatives to it). - 等等,什么?!嵌套共享布局页面有什么问题?我正在我的项目中这样做,它的工作原理与预期一样!
    • @iamserious - 你使用的是什么版本的 ASP.NET MVC?
    • MVC 3!实际上,我从未使用过任何其他 mvc 框架,如果您在以前的版本中无法做到这一点,敬请见谅!
    • AH :) 检查我何时回复此帖子。不久前,MVC1。现在,我们在Razor 中有区域,这意味着最终可以放弃ASP:SMELL crap. 哦,嵌套共享布局页面没有任何问题.. 从来没有建议有。只是抱怨(当时)我们仍然必须使用的唯一 asp:YUCK 控件是母版页/内容控件..因为Razor 不在身边。
    • 是的!我应该看到发布的日期,我的错误,道歉!看来你非常鄙视 ASP 网页表单!
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这不是更快吗?

        for classes .row0 & .row1 这可能很愚蠢 - 只是把它扔在那里。
      • @Emma:当然,你不是 Bon Iver sings aboutTHE EMMA
      【解决方案4】:
      <p each="var item in ViewData.Model">${item.Name}</p>
      

      嗯,好吃Spark

      【讨论】:

      • 补充 Brad 的回答,Spark 是一个替代 MVC 模板框架,类似于 Razor,但语法不同。我是 Spark 的忠实粉丝,但熟悉它的开发人员较少。
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-19
        • 2013-03-16
        • 1970-01-01
        • 2011-02-22
        • 2013-06-06
        • 2013-11-02
        • 2013-03-21
        相关资源
        最近更新 更多