使用 Lambda 表达式的 Databinder.Eval






4.80/5 (5投票s)
使用 lambda 表达式来帮助编译时检查 Eval 语句
引言
我们都做过,并且都知道处理魔术字符串可能会令人沮丧。虽然修复或规避起来并不困难,但 Databinder.Eval("")
方法需要使用字符串才能工作。然而,使用一些扩展方法(或辅助类)可以消除对这些魔术字符串的依赖,并允许您的代码使用 lambda 表达式。
Using the Code
public static class ExtensionMethods
{
public static string Evaluate<T>(this ListViewItem item,
Func<T, object> expression)
{
var result = expression((T)item.DataItem);
if (result != null)
return result.ToString();
return null;
}
public static TOutput Evaluate<T, TOutput>
(this ListViewItem item, Func<T, TOutput> expression)
{
return (TOutput)expression((T)item.DataItem);
}
}
因此,有了这些,您可以不用如下所示的代码:
<asp:GridView ID="gvName" runat="server" AutoGenerateColumns="False"
HorizontalAlign="Center">
<Columns>
<asp:TemplateField HeaderText="County Name">
<ItemTemplate>
<%# Eval("County.Name") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
而是使用更冗长,但更稳定的 lambda 版本:
<asp:GridView ID="gvName" runat="server" AutoGenerateColumns="False"
HorizontalAlign="Center">
<Columns>
<asp:TemplateField HeaderText="County Name">
<ItemTemplate>
<%# Container.Evaluate<AddressEntity>(c=>c.County.Name) %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
关注点
只需记住在页面顶部或在 web.config 中包含放置代码的命名空间即可。
Evaluate
方法的第二个版本允许您将数据作为其真实类型返回,而不是将其作为 string
返回。如果您需要调用页面方法并且不想先将其转换为 string
,然后再将其转换回原始类型,这将非常有用。
<%# DoSomething(Container.Evaluate<AddressEntity, int?>(c=>c.County.CountyID)) %>
历史
- 2010/07/04 - 原始草稿