我正在尝试理解ASPX / ASCX中的Eval()语句如何解析为DataBinder.Eval(context, expression)
方法,更多是Eval("Value")
在达到此方法之前进行反射?
我正在考虑一些我想做的事情:
EvalList()
只能通过可以绑定的Reflection转储所有可用的字段,只是为了帮助调试/开发以确定上下文中的可用内容。我希望能够只输入EvalList(
)而不是SomeHelper.EvalList()
Eval("")
重定向到另一种方法,Debug.Assert()
或类似的方法会警告开发人员,如果它被过度使用,而其他方法可能会提高性能。答案 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()。