zoukankan      html  css  js  c++  java
  • Asp.net中数据绑定方法的总结

      经常在模板中使用Eval进行数据绑定, 如 <%#Eval("title") %>表示绑定到title列. 实际上这个Eval()方法是Page类的受保护方法,最终调用的是共享的静态DataBinder.Eval()方法.通过Reflector可以看到

    protected internal object Eval(string expression)
    {
        this.CheckPageExists();
        return DataBinder.Eval(this.Page.GetDataItem(), expression);
    }

    所以可以用下面的表达式来替换上面使用Eval()方法的表达式:

    <%# DataBinder.Eval(Container.DataItem, "title")%>

      而DataBinder.Eval(object container, string expression)方法, 关于 container 在 msdn 上特别指出 :

    对于所有的列表 Web 控件,如 GridViewDetailsViewDataList 或 Repeatercontainer 都应为 Container.DataItem 如果要针对页进行绑定,则 container 应为 Page

    对于Eval()方法本身是利用反射技术来根据名称查找属性,而使用反射会有一定的性能损失. 作为一种折中的方法, 可以在表达式中将数据项强制转换成某种类型以提高性能:

    <%#((System.Data.DataRowView)Container.DataItem)["title"]%>

      网上关于Container.DataItem的介绍:

      Container是ASP.NET页面编译器在数据绑定事件处理程序内部声明的局部变量, 其类型是可以进行数据绑定的控件的数据容器类型(如Repeater内部的数据绑定容器叫RepeaterItem),在这些容器类中基本都有DataItem属性, 因此可以写成Container.DataItem, 介个属性返回的正是在被绑定的数据源中的那个数据项. 如果你的数据源是DataTable,那么这个数据项的类型就是DataRowView

      另外: 使用Eval()方法只能进行单项数据绑定. 使用Bind()方法可以进行双向绑定, 不仅可以显示数据项, 而且还可以对数据项进行编辑

    查看更多绑定技巧:

      Asp.net中DataBinder.Eval用法的总结  

          Asp.net之Container.DataItem 解析(转载)

  • 相关阅读:
    网卡驱动引起openstack的mtu问题
    Ironic几种不同的场景下的网络拓扑
    enable multi-tenancy on openstack pike
    galera断电后无法重建集群
    Fabric单节点安装备忘
    OpenStack Ironic 常见问题
    Enable multi-tenancy on ironic
    kolla-ansible快速入门
    kolla管理openstack容器
    d2.js学习笔记(七)——动态SVG坐标空间
  • 原文地址:https://www.cnblogs.com/rgshare/p/2623395.html
Copyright © 2011-2022 走看看