后期绑定在ASP.NET的数据处理中经常使用,也有不少文章讨论各种绑定方法的优劣。 讨论的最多的话题是速度问题,常见的观点是DataBinder.Eval(Container.DataItem, "id")的处理比较慢,相对来说,((DataRowView)Container.DataItem)["id"]就要好很多。这一点ASP.NET的qucik start里也提到。
但是速度不是唯一的问题,绑定的时间次序也很重要,看下面的例子:
< asp:Repeater id=CategoryList Runat="server" >
< ITEMTEMPLATE >
< P class=Category >
< %# ((DataRowView)Container.DataItem)["title"] % >
< App:BoardList id=Board Runat="server" Category='< %# DataBinder.Eval(Container.DataItem, "id") % >' />
< /P >
< /ITEMTEMPLATE >
< /asp:Repeater >
这里Repeater里调用了另外一个User Control,由于((DataRowView)Container.DataItem)方法的绑定时间比较早,在把参数传递给另一个User Control的时候,这种方法就行不通了,你会得到一个引用的对象不存在的错误。而必需用第二种方法绑定,虽然比较慢(绑定的时间较晚,对象已经生成了),程序就可以正常运行了。
大家有兴趣可以尝试看看。其实上面的这个例子是一个最简单的嵌套Repeater类Control的方法,效率不是最高,但非常简单实用。