Eval如何解析为DataBinder.Eval?

时间:2013-11-08 13:58:58

标签: c# asp.net data-binding

我正在尝试理解ASPX / ASCX中的Eval()语句如何解析为DataBinder.Eval(context, expression)方法,更多是Eval("Value")在达到此方法之前进行反射?

我正在考虑一些我想做的事情:

  1. 向Eval介绍一个类似的东西 - 比如说EvalList()只能通过可以绑定的Reflection转储所有可用的字段,只是为了帮助调试/开发以确定上下文中的可用内容。我希望能够只输入EvalList()而不是SomeHelper.EvalList()
  2. Eval("")重定向到另一种方法,Debug.Assert()或类似的方法会警告开发人员,如果它被过度使用,而其他方法可能会提高性能。

1 个答案:

答案 0 :(得分:2)

完全避免使用Eval()并使用ASP.NET WebForms 4.5及更高版本中的模型绑定功能,如下所示:

Pre-ASPP.NET 4.5使用Eval()

<asp:ListView ID="OrdersListView" runat="server">
    <ItemTemplate>
        <tr>
            <td>
                <asp:Button ID="EditButton" runat="server" Text="Edit" 
                            CommandName="Edit" />
            </td>
            <td>
                <asp:Label ID="OrderID" runat="server" 
                           Text='<%# Eval("SalesOrderID") %>' />
            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>

模型绑定方式:

<asp:ListView ID="OrdersListView" runat="server" 
              ItemType="YourNamespace.YourClass">
    <ItemTemplate>
        <tr>
            <td>
                <asp:Button ID="EditButton" runat="server" Text="Edit" 
                            CommandName="Edit" />
            </td>
            <td>
                <asp:Label ID="OrderID" runat="server" 
                           Text='<%#: Item.YourPropertyName %>' />
            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>

注意:由于ItemType是强类型的,因此当您键入Item.时,您将在Visual Studio中获得IntelliSense帮助。

阅读ASP.NET 4.5 Web Forms Features - Strongly-Typed Data Controls,快速了解您可能永远不再需要Eval()。