在两种情况下绑定例如名为(“名称”)的列之间的区别是什么?并且有任何性能差异吗?
1-在标记中分配数据
<asp:Label ID="Name_Lbl" runat="server" Text='<%# Eval("Name") %>' ></asp:Label>
2-为转发器ItemTemplate中的每个控件定义一个控制对象并找到它,然后将“Name”列中的数据分配给它
e.Item.FindControl("Name_Lbl")
答案 0 :(得分:4)
您可能会得到相同的结果,但性能可能会有所不同。数据绑定表达式(Eval
)使用引擎下的反射来绑定数据,而FindControl
将向上走控制树以找到必要的控件。反射确实有一些性能成本(取决于你查找了多少属性/名称,虽然一旦查找了一个有效的描述符确实被缓存)。另一方面,控制树行走的开销将取决于控制树的深度。
IMO,数据绑定语法更优雅,我更喜欢 - 性能必须以相对的术语来看 - 与总请求时间相比,我花费了多少额外费用,因此与其他活动相比,数据绑定成本可以忽略不计实际上是获取数据。说数据绑定存在变化以避免反射 - 请参阅http://weblogs.asp.net/jgalloway/archive/2005/09/20/425687.aspx。
很多时候,我使用代码隐藏属性来提供强类型属性以便于使用。例如,当repeater与实体类ProductDetails的数组/列表/枚举绑定时,在代码隐藏中,我使用的方法如
protected ProductDetails GetProduct(RepeaterItem container)
{
return (ProductDetails)container.DataItem;
}
在加价中,
<asp:Label ID="Name_Lbl" runat="server" Text='<%# GetProduct(Container).Name %>' ></asp:Label>
更不用说你使用GetProduct(Container)
进行intellisense处理它的字符串类型
答案 1 :(得分:0)
没有区别,.NET在后端创建了相同的ControlTree。本文解释了编译期间ASP.NET的内幕。这是一篇较旧的文章但相关。