不是问Bind有什么用或怎么用哦,也不是问Eval和Bind区别
我知道Eval是Page从TemplateControl继承的方法,但是一直找不出Bind是谁的方法,
难道只是一个“特殊标记”?.Net根据“特殊标记”生成代码?

解决方案 »

  1.   

    Bind()不是ASP.NET的方法!当ASP.NET解析页面时,会把Bind()先转换成类似Eval()的语句,然後再复值~ 
      

  2.   

    记得好象是 UCOMITypeComp 接口的方法,不确定
      

  3.   

    UCOMITypeComp 不是接口,是ITypeComp的实现类
    现在问题是Page并不实现ITypeComp接口,如何能在页面调用到Bind方法呢
      

  4.   

    数据绑定方法的执行效率排序。
    <%#Container.DataItem%>
    <%#GetDataItem()%>
    <%#Eval("字段名")%>
    <%#DataBinder.Eval(Container.DataItem,"字段名")%>
    <%#((DataRowView)Container.DataItem)["字段名"] %>
    <%#((Type)Container.DataItem).成员 %>
    <%#((Type)GetDataItem()).成员 %>
      

  5.   

     Bind() .net中数据绑定方法
      

  6.   

    模板支持单向绑定表达式是因为他实现了ITemplate接口,
    而支持双向绑定表达式是因为它实现了IBindableTemplate接口。
      

  7.   

    模板支持单向绑定表达式是因为他实现了ITemplate接口,     // eval()
    而支持双向绑定表达式是因为它实现了IBindableTemplate接口。  // bind()
      

  8.   

    不是说bind()最初是谁的,而是哪个C#类(控件也是一个类)需要实现双向绑定的功能,
    就继承了IBindableTemplate接口,从而实现bind()方法.
      

  9.   

    你确定IBindableTemplate有Bind方法吗
      

  10.   

    “模板支持单向绑定表达式是因为他实现了ITemplate接口,而支持双向绑定表达式是因为它实现了IBindableTemplate接口。”    书名:揭秘1  246页
    “在双向数据绑定表达式中使用Bind()方法来显示值”  244页
      

  11.   

    你去看看CompiledBindableTemplateBuilder 和 CompiledTemplateBuilder这两个类就明白了。
      

  12.   

    IBindableTemplate 接口定义 ExtractValues 方法。此方法是为双向数据绑定定义的,这样,数据绑定控件在运行时可以从模板化内容中自动提取名称/值对,并将这些名称/值对传递给数据源控件。要成功进行自动数据绑定,ExtractValues 方法从模板化内容中提取的字段名称必须与关联数据源控件中的参数名称匹配。控件开发人员仅在其 ExtractRowValues 或自定义数据绑定控件的其他相似方法的实现内显式调用 ExtractValues 方法。
     示例下面的代码示例演示 FormView 控件如何以声明方式进行以下操作:定义模板化内容,绑定到 SqlDataSource 控件提供的数据,显示和编辑现有记录。ASP.NET 分析器对模板化内容进行分析,并在运行时创建 IBindableTemplate 对象,该对象能够将 SqlDataSource 控件中的值绑定到模板中定义的数据绑定区域,该区域由单向 ASP.NET 数据绑定语法 (<%# Eval("fieldname") %>) 和双向数据绑定语法 (<%# Bind("fieldname") %>) 共同定义。 
      

  13.   

    模板支持单向绑定表达式是因为他实现了ITemplate接口,而支持双向绑定表达式是因为它实现了IBindableTemplate接口。这是不对的。以TemplateField的  EditItemTemplate 为例。这只是个ITemplate。关键是有BindingDirection.TwoWay这个attribute.这样ASP.NET在解析aspx的时候会创建CompiledBindableTemplateBuilder而不是CompiledTemplateBuilder,从而你可以从里面获取数据来做到双向绑定。 [PersistenceMode(PersistenceMode.InnerProperty), WebSysDescription("TemplateField_EditItemTemplate"), Browsable(false), TemplateContainer(typeof(IDataItemContainer), BindingDirection.TwoWay), DefaultValue((string) null)]
        public virtual ITemplate EditItemTemplate { get; set; }
      

  14.   

    Bind()支持双向绑定,但是如果里面套用后台方法就会报错,我一直也搞不清楚原因,望高人指点
      

  15.   

    这并不足以说明Bind是IBindableTemplate的方法
      

  16.   

    对,我错了。
    bind()也许认为是一种语法更为恰当,msdn:"双向数据绑定语法 ( <%# Bind("fieldname") %>) "。 
    但是可以肯定一点的是通过IBindableTemplate接口实现的。
    如果再细抠,可能Allen_Chen_说的"通过属性实现的"。
    等高人吧!
      

  17.   

    看来Bind确实是一种特殊标记或者叫语法,谢谢各位参与讨论引用黄及峰《深入ASP.NET数据绑定》http://msdn.microsoft.com/zh-cn/dd407792.aspx
    Bind 与Eval 不一样,这样的Bind 并不Page 或TemplateControl 的一个方法,事实上我们应该把它当成一个关键字来看待,因为在ASP.NET 的双向数据绑定当中,并没有这样的一个函数存在,它的存在是只是告诉ASP.NET 动态编译页面类时,将这个语法编译成一定的代码格式,并生成一些函数代理来达到双向数据交流的目的。