6

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

Eval("ColumnName")

或处理 ItemDataBound 或 RowDataBound 事件,如:

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

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

4

3 回答 3

5

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

根据这个较早的文档,提高 .NET 应用程序性能和可扩展性,它更有效(在第 297 页提到)。

于 2010-11-04T13:51:53.033 回答
2

Eval 可能更快(取决于情况,因为它也是后期绑定并使用反射),但通过 DataBound-Event 它更具可读性和更面向未来。

于 2010-11-04T13:49:55.300 回答
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 中处理,并且更容易维护。并且您应该始终期望您的代码需要稍后修改/添加。

于 2014-03-05T16:43:11.647 回答