【问题标题】:ASP .NET - What's going on behind an Eval()?ASP .NET - Eval() 背后发生了什么?
【发布时间】:2010-04-13 14:57:55
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: .net asp.net eval


    【解决方案1】:

    这是一个很好的资源:@​​987654321@

    避免它的一些原因:http://weblogs.asp.net/jgalloway/archive/2005/09/20/425687.aspx

    一种通过显式转换来改进的方法:http://dotnettipoftheday.org/tips/use-explicit-casting-instead-of-databinder.eval.aspx

    HTH。

    【讨论】:

      【解决方案2】:

      Eval 是一种快捷方式。不过,它是一个实际的方法调用,不像Bind,它更像是一个代码 sn-p。

      Data-Binding Expressions 上的 MSDN 文章应该给你一个很好的概述。

      简而言之,解析器在读取页面时调用DataBinder.Eval 并将当前DataItem 与您指定的字符串一起传递到上下文中。这很像从 DataReader 中读取列。

      上下文中的 DataItem 取决于发生的位置。例如,在 GridView 中,这可能类似于 GridView 绑定到的 DataTable 中的 DataRow 对象,但它实际上可以是任何对象,因为它通过反射工作。对于 DataRow,Eval("Foo") 会尝试从 DataRow 的 Foo 列中提取数据。

      您现在可以看到这可能会变坏的地方。如果 DataRow 停止包含 Foo 列,则 Eval 调用将惨遭失败,但直到运行时才会失败,因为不涉及强类型/名称检查。

      【讨论】:

        猜你喜欢
        • 2013-08-06
        • 1970-01-01
        • 2014-04-04
        • 2016-06-28
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多