1

我试图了解 ASPX/ASCX 中的 Eval() 语句如何解析为该DataBinder.Eval(context, expression)方法,更何况Eval("Value")在达到此方法之前该去哪里进行反射?

我正在考虑我想做的几件事:

  1. 向 Eval 引入类似的东西 - 说EvalList()which justs 通过可以绑定的反射转储所有可用字段,只是为了在调试/开发时帮助确定上下文中可用的内容。我希望能够只输入EvalList() 而不是SomeHelper.EvalList()
  2. 重定向Eval("")到不同的方法,Debug.Assert()如果它被过度使用,它将或类似地警告开发人员,并且其他方法可能对性能更好。
4

1 回答 1

2

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

Pre-ASP.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是强类型,当您键入时,您将在 Visual Studio 中获得 IntelliSense 帮助Item.

阅读ASP.NET 4.5 Web 窗体功能 - 强类型数据控件,以快速了解您可能不再需要 Eval()。

于 2013-11-08T15:40:33.623 回答