ASP .NET - Eval()背后发生了什么?

时间:2010-04-13 14:57:56

标签: .net asp.net eval

我试图理解Eval()如何为特定目的工作。我正在研究一个我不太了解的项目,我需要阅读一些数据并将它们放在下拉列表中。这些数据已经被读取并显示在ItemTemplate中。我注意到使用Eval()方法读取了。 类似的东西:

<ItemTemplate>
   <a href="...=<%# Eval("foo") %>></a>
</ItemTemplate>

我需要知道Eval从哪里获取这些数据,以便发现我应该在下拉列表中读取它们的位置!但我真的不明白它是如何工作的! 我知道Eval()在运行时评估数据绑定表达式,但你认为我应该在哪里看看?

谢谢

2 个答案:

答案 0 :(得分:3)

答案 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调用将失败,但直到运行时才会失败,因为没有涉及强类型/名称检查。