Eval和ItemDataBound或RowDataBound事件来显示数据,哪一个更好?

时间:2010-11-04 13:43:19

标签: asp.net performance databound-controls

如果我有DataBoundControl,如GridView,Repeater和/或DataList,哪种方法更好(性能方面),我使用以下方法显示数据:

Eval("ColumnName")

或处理ItemDataBound或RowDataBound事件,如:

void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{
    // my code to display data here
}

我更喜欢第二个出于代码可读性的原因,但出于性能原因,它们是否相同(或者它们是否相同)?

3 个答案:

答案 0 :(得分:5)

我也更喜欢第二个版本。调试和分离html&更容易在我看来代码。

根据这个较旧的文档Improving .NET Application Performance and Scalability,它更有效(在第297页提到)。

答案 1 :(得分:2)

Eval可能更快(取决于情境,因为它也是后期并使用反射),但是通过DataBound-Event它更具可读性和更具前瞻性。

答案 2 :(得分:0)

我认为每种情况都很有用。如果不需要太多逻辑,eval方式是一种简单快捷的方法。但是,我已经看到它被没有经验的程序员滥用了。

我最近接手了他们使用转发器的项目的开发。他们正在做类似以下的事情:

    <asp:Repeater>
      <ItemTemplate>
        Field Visible = '<%# (method(dataItem.a)) %>
        Field
        Field Visible = '<%# method(Eval(dataItem.a),Eval(dataItem.b)) %>'
        Field
        Field Visible = '<%# (method(dataItem.a)) %>'
        Field Visible = '<%# (method(dataItem.b)) %>'
      </ItemTemplate>
    </asp:Repeater>

这看起来很痛苦。看起来开发人员只是继续添加更多字段并调用相同的方法来检查该字段是否应该显示。这样的东西很容易在ItemDataBound中处理,并且更容易维护。并且您应该始终编程,期望您的代码需要在以后修改/添加。