我试图理解Eval()如何为特定目的工作。我正在研究一个我不太了解的项目,我需要阅读一些数据并将它们放在下拉列表中。这些数据已经被读取并显示在ItemTemplate中。我注意到使用Eval()方法读取了。 类似的东西:
<ItemTemplate>
<a href="...=<%# Eval("foo") %>></a>
</ItemTemplate>
我需要知道Eval从哪里获取这些数据,以便发现我应该在下拉列表中读取它们的位置!但我真的不明白它是如何工作的! 我知道Eval()在运行时评估数据绑定表达式,但你认为我应该在哪里看看?
谢谢
答案 0 :(得分:3)
这是一个很好的资源:http://bytes.com/topic/asp-net/answers/447041-databinder-eval-mystification
避免它的一些原因:http://weblogs.asp.net/jgalloway/archive/2005/09/20/425687.aspx
通过显式转换改进的一种方法:http://dotnettipoftheday.org/tips/use-explicit-casting-instead-of-databinder.eval.aspx
HTH。
答案 1 :(得分:2)
Eval
是一种捷径。这是一个实际的方法调用,不像Bind
,它更像是一个代码片段。
关于Data-Binding Expressions的MSDN文章应该给你一个非常好的概述。
简单地说,解析器在读取页面时会调用DataBinder.Eval并在上下文中传入当前DataItem以及您指定的字符串。这很像从DataReader读取列。
上下文中的DataItem取决于发生的位置。比方说,在GridView中,这可能就像GridView绑定的DataTable中的DataRow对象一样,但它可以是任何对象,因为它通过反射工作。对于DataRow,Eval(“Foo”)将尝试从DataRow的Foo列中提取数据。
你现在可以看到这可能会变坏。如果DataRow停止包含Foo列,则Eval调用将失败,但直到运行时才会失败,因为没有涉及强类型/名称检查。