Item vs Container.DataItem vs Eval

时间:2016-05-15 07:46:22

标签: asp.net performance data-binding

我从.NET 2.0迁移到.NET 4.5,我可以选择从EvalContainer.DataItem切换到ItemType + Item。但性能呢? Item如何在内部实施?它是基于Container.DataItem还是Eval还是其他什么?

1 个答案:

答案 0 :(得分:3)

更新

根据以下链接,Container.DataItem将在运行时使用反射,ItemType将在运行时保存此步骤,因此ItemType应该比Container.DataItem更高性能

What's New in ASP.NET 4.5 and Visual Studio 2012

以前使用GridView等模板控件时,您可以声明类似于以下语法的项目:<%# DataBinder.Eval(Container.DataItem, "Price") %> 使用这种语法,容易出错,例如键入错误,IDE在运行时不知道您绑定的类型。 ASP.Net 4.5允许您指定项目的类型,从而解决了这些问题 语法如下<%# Item.ID> 这是两种语法之间的主要区别。

关于如何在.net 4.5中实现此功能 首先是你的课程

  

(我将使用GridView作为示例)

public class SalesPerson
{
  public string SalesPersonID { get; set; }
  public string     FirstName { get; set; }
  public string      LastName { get; set; }
}

接下来确定ItemType

<asp:GridView ID="GridView1" runat="server"
              AutoGenerateColumns="false"
              DataKeyNames="SalesID"
              SelectMethod="yourGetMethod"
              UpdateMethod="yourUpdateMethod"
              ItemType="SalesPerson">
  <Columns>
    <asp:TemplateField HeaderText="">
      <ItemTemplate>
        <asp:Label ID="Label1" runat="server"
                   Text='<%# Item.SalesID %>'></asp:Label>
      </ItemTemplate>
      <EditItemTemplate>
        <asp:Label ID="Label4" runat="server"
                   Text='<%# Item.SalesID %>'></asp:Label>
      </EditItemTemplate>
    </asp:TemplateField>

结论 将.net 4.5中的Container.DataItem替换为ItemType以解决错误问题作为输入问题,并且使用ItemType编译器可以检测输入错误是否有任何错误 < / p>