zoukankan      html  css  js  c++  java
  • asp.net 中 Eval() Bind() <%%> <%=%> 总结

    eval和bind都是绑定datatable或者其他(集合,等)中的内容,那么他们有什么区别呢?性能方面怎么样呢?eval有哪几种用法呢?本文将做详细介绍:
    ASP.NET中的Eval和DataBinder.Eval方法
    bind是双向绑定,但需数据源可更改才能用。ASP.NET 2.0改善了模板中的数据绑定操作,把v1.x中的数据绑定语法DataBinder.Eval(Container.DataItem, fieldname)简化为Eval(fieldname)。Eval方法与DataBinder.Eval一样可以接受一个可选的格式化字符串参数。缩短的Eval语法与DataBinder.Eval的不同点在于,Eval会根据最近的容器对象(例如DataListItem)的DataItem属性来自动地解析字段,而DataBinder.Eval需要使用参数来指定容器。由于这个原因,Eval只能在数据绑定控件的模板中使用,而不能用于Page(页面)层。当然,ASP.NET 2.0页面中仍然支持DataBinder.Eval,你可以在不支持简化的Eval语法的环境中使用它。

    用法<%# Bind("Subject") %> //绑定字段
    <%# Container.DataItemIndex + 1%> //实现自动编号
    <%# Container.ItemIndex %> //Repeater自动编号
    <%# DataBinder.Eval(Container.DataItem, "[n]") %>
    通常使用的方法(這三個性能最好)
    <%# DataBinder.Eval(Container.DataItem, "ColumnName") %>
    <%# DataBinder.Eval(Container.DataItem, "ColumnName", null) %>
    <%# DataBinder.Eval(Container, "DataItem.ColumnName", null) %>
    其他用法
    <%# ((DataRowView)Container.DataItem)["ColumnName"] %>
    <%# ((DataRowView)Container.DataItem).Row["ColumnName"] %>
    <%# ((DataRowView)Container.DataItem)["adtitle"] %>
    <%# ((DataRowView)Container.DataItem)[n] %>
    <%# ((DbDataRecord)Container.DataItem)[0] %>
    <%# (((自定义类型)Container.DataItem)).属性.ToString() %>//如果属性为字符串类型就不用ToString()了

    Eval用法
    DataBinder.Eval范例
    <%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
    格式化字符串参數是可选的。如果忽略参数,DataBinder.Eval 返回对象类型的值,

    //显示两位小数
    <%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %>

    格式:
    {0:d} 日期只显示年月日
    {0:yyyy-mm-dd} 按格式显示年月日
    {0:c} 货币样式
    <%#Container.DataItem("price","{0:¥#,##0.00}")%>
    <%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%>
    Specifier Type      Format    Output (Passed Double 1.42)   Output (Passed Int -12400) 
    c   Currency         {0:c}      $1.42      -$12,400 
    d   Decimal          {0:d}     System.FormatException   -12400 
    e   Scientific       {0:e}     1.420000e+000     -1.240000e+004 
    f   Fixed point      {0:f}   1.42     -12400.00 
    g   General          {0:g}   1.42      -12400 
    n   Number with commas for thousands   {0:n}   1.42      -12,400 
    r   Round trippable     {0:r}   1.42      System.FormatException 
    x   Hexadecimal     {0:x4}   System.FormatException    cf90 

    {0:d} 日期只显示年月日
    {0:yyyy-mm-dd} 按格式显示年月日

    样式取决于 Web.config 中的设置
    {0:c}   或 {0:£0,000.00} 货币样式,标准英国货币样式



    显示为£3,000.10

    {0:c}   或 string.Format("{0:C}", price); 中国货币样式



    显示为 ¥3,000.10

    {0:c}   或 string.Format("{0:C}", price); 美国货币样式


    Eval(" ")绑定两个字段:
    CommandArgument='<%#Eval("dyid").ToString()+Eval("dyid1").ToString()+… %>'这种形式就行
    你把Eval("").ToString()当成一个普通字符串,而'<%# %>'保留就行,你高兴怎么处理就怎么处理,
    所有字符串的操作都有效,你还可以用静态函数来处理这些字符串。
    
    <asp:TextBox ID="TextBox5" runat="server" class="inputwidth100" 
    Text='<%# Eval("RZMJ").ToString()+Eval("LDDW").ToString() %>'></asp:TextBox>
    区别:
    绑定表达式 
    <%# Eval("字段名") %>
    <%# Bind("字段名") %>
    区别 eval是只读数据,Bind是可更新的.(可以读取和写入)
    对于程序员来说最根本的区别是:
    1.Bind是可更新的,是Bind绑定列可编辑,并且可以和数据源控件交互,直接和数据库交互,但是用Bind的话,程序端的自定义操作就不能用了,比如Convert,ToString()等,或自己写的函数,在程序端都不可以
    2.eval是只读数据,用eval的话不可以和数据源控件交互,是单向的,但是可以自定义操作
    比如上面的<%# Eval("字段名").ToString().Trim()%>
    本人从来和数据库交互自己写代码,所以对我来说操作的Eval更方便,基本不用Bind,而且以前写过,绑定泛型的时候
    Bind都不支持嵌套类

    下面接受啊<%%> <%= %>
    <% %> 放在 HTML中写后台程序代码.
    <%= %> 放在HTML中输出一个变量,表达式。。
  • 相关阅读:
    oracle一次删除多张表
    JS学习之动态加载script和style样式
    JS动态引入js、CSS动态创建script/link/style标签
    js设置全局变量ajax中赋值
    java获取程序执行时间
    echarts学习总结(二):一个页面存在多个echarts图形,图形自适应窗口大小
    Codeforces Round #188 (Div. 1) B. Ants 暴力
    Codeforces Round #188 (Div. 2) C. Perfect Pair 数学
    Codeforces Round #188 (Div. 2) B. Strings of Power 水题
    Codeforces Round #188 (Div. 2) A. Even Odds 水题
  • 原文地址:https://www.cnblogs.com/101rico/p/2867336.html
Copyright © 2011-2022 走看看