【发布时间】:2012-11-03 01:01:08
【问题描述】:
这可能是我可以自己测试的事情之一,但我想从比我更了解数据绑定的人那里获得更具包容性的答案。我自己更像是一个模型密集型 MVC 人,所以我对 asp.net 数据绑定的整个概念有点新。
这就是我所理解的:您将一个控件或整个页面绑定到一个数据源,然后您可以使用DataBinder 类来帮助在运行时解析数据。
我不太明白的是范围。例如,我最近继承的遗留应用程序有很多这样的行:
DataBinder.Eval(Container.DataItem, "saved_offer_id");
但我很困惑 asp.net 如何知道在哪里可以找到 saved_offer_id 键。例如,假设我们有两个中继器,如下所示:
<asp:Repeater id="repeater1">
<span>My offer ID is <# DataBinder.Eval(Container.DataItem, "saved_offer_id") %></span>
</asp:Repeater>
<asp:Repeater id="repeater2">
<span>My offer ID is <# DataBinder.Eval(Container.DataItem, "saved_offer_id") %></span>
</asp:Repeater>
假设每个中继器都有自己的数据源。 DataBinder 如何知道要查看哪个数据源?是否存在这两个转发器可能显示不同的商品 ID 值的情况?
【问题讨论】:
-
DataBinder 使用与其父对象关联的 DataSource
-
@AntLaC 这正是我想要的。不过,这又带来了另一个问题。嵌套控件呢?就像中继器中的中继器一样,都有自己的数据源。那么嵌套中继器是否可以访问这两个源?
-
不是真的,不是我相信你的问题在问的意义上。嵌套阅读器可以读取其父阅读器的当前记录的值
-
@AntLaC 好的,谢谢。还有一个问题。我知道(多亏了你)它使用了它的父控件的数据源,但是它怎么知道它的父控件是什么?我猜
<# ... %>块可以同时访问服务器和 DOM? -
我不确定确切的技术原因,但基本上它包含的任何控件都是它的父级。如果您查看呈现的 HTML,您将看到转发器内的控件如何在其 ID 中添加转发器名称前缀
标签: c# asp.net data-binding scope