首先在code behind中加入以下方法

首先在code behind中加入以下方法 protected virtual object ExpHelperTEntity, TREsult(FuncTEntity, TREsult func){var itm GetDataItem();return func((TEntity)itm);}这段代码就是最核心的秘诀了你完全可以忽视它到底在做什么。其实就是截获每一个被绑定的数据项并进行强类型转换。假设我们定义了学生类public class Student{public string Name { get; set; }public int Age { get; set; }}如果希望在页面中使用强类型访问学生类而不是用Eval定义专门访问学生的方法protected object StuTResult(FuncStudent, TResult func){return ExpHelperStudent, TResult(func);}大功告成于是在页面里我们就能这样绑定数据了ulasp:Repeater IDrptStudents runatserverItemTemplateli%#Stu(__.Name ( _.Age))%/li/ItemTemplate/asp:Repeater/ul这样做有四大优势得到编译时检测享受智能提示强类型转换比Eval反射性能更高页面中的表示更丰富如上我们可以自由拼接想要的字符串非常像MVC更神奇的是可以支持多层嵌套哦。比如我们定义学生的集合Group类和访问器然后就能用嵌套的Repeater显示分组信息了。完整程序如下% Page LanguageC# AutoEventWireuptrue%script runatserverpublic class Student{public string Name { get; set; }public int Age { get; set; }}public class Group{public IEnumerableStudent Students { get; set; }}protected void Page_Load(object sender, EventArgs e){//一群学生var students new[] {new Student{Namemike,Age23},new Student{Namejane, Age12},new Student{Namefrank,Age25},new Student{Namesusan,Age32},};rptStudents.DataSource students;//分两组var group0 new Group();group0.Students students.Take(2);var group1 new Group();group1.Students students.Skip(2).Take(2);rptGroups.DataSource new[] { group0, group1 };DataBind();}protected virtual object ExpHelperTEntity, TREsult(FuncTEntity, TREsult func){var itm GetDataItem();return func((TEntity)itm);}//Student访问器protected object StuTResult(FuncStudent, TResult func){return ExpHelperStudent, TResult(func);}//Group访问器protected object GrpTResult(FuncGroup, TResult func){return ExpHelperGroup, TResult(func);}/script!DOCTYPE htmlhtmlbody%--单层--%ulasp:Repeater IDrptStudents runatserverItemTemplateli%#Stu(__.Name ( _.Age))%/li/ItemTemplate/asp:Repeater/ul%--嵌套--%ulasp:Repeater IDrptGroups runatserverItemTemplateliolasp:Repeater IDRepeater1 runatserver DataSource%#Grp(__.Students) %ItemTemplateli%#Stu(__.Name ( _.Age))%/li/ItemTemplate/asp:Repeater/ol/li/ItemTemplate/asp:Repeater/ul/body/htmlPS本文是我以前写的没有发表的小发明现在拿出来晒主要是因为这个方法好像知道的人很少。希望大家能帮助测试一下性能如果觉得合适大可以运用到实际工作中。更新感谢Dacey 韦恩卑鄙 dudu老大等人的建议我已添加了扩展方法版本。喜欢扩展方法这种空降兵的感觉。现在只要添加一个static的帮助类名字随你喜欢public static class Helper{static object ExpHelperTEntity, TResult(Page page, FuncTEntity, TResult func){var itm page.GetDataItem();return func((TEntity)itm);}public static object EvalT(this Page page, FuncT, object func){return ExpHelperT, object(page, func);}}