asp.net Eval和Bind区别分析

eval和bind的区别
最近在做asp教程.net的项目,因为涉及到数据库教程项目的绑定,而eval和bind一直老是忘记,现在baidu了下,留个记号:

绑定表达式

<%# eval(“字段名”) %>

<%# bind(“字段名”)%>

最主要的区别:

1、eval取出来的数据时只读的,而bind是可更新的数据。

2、eval通常用来需要对数据进行格式化成字符串,因而和bind方法比,性能会有所下降。

3、在运行时,eval调用databinder对象的eval方法,同时引用命名容器的当前数据项。命名容器通常是包含完整记录的数据绑定控件的最小组成部分,如 gridview 控件中的一行。因此,只能对数据绑定控件的模板内的绑定使用 eval 方法。具体内容可以参考msdn中关于databinder.eval()方法的描述。

通过eval来获取字段的值。如下:

protected void page_load(object sender, eventargs e)
{
    list<comment> comments = getcomments();
    this.rptcomments.datasource = comments;
    this.rptcomments.databind();
}

<asp:repeater runat="server" id="rptcomments">
    <itemtemplate>
        title: <%# eval("title") %>

        conent: <%# eval("content") %>
    </itemtemplate>
    <separatortemplate>
        <hr />
    </separatortemplate>
</asp:repeater>

  在这里,eval对象就会通过反射来获取title和content属性的值。于是经常就有人会见到说:“反射,性能多差啊,我可不用!”。在这里我还是对这种追求细枝末节性能的做法持保留态度。当然,在上面的例子里我们的确可以换种写法:

<asp:repeater runat="server" id="rptcomments">
    <itemtemplate>
        title: <%# (container.dataitem as comment).title %>

        conent: <%# (container.dataitem as comment).content %>
    </itemtemplate>
    <separatortemplate>
        <hr />
    </separatortemplate>
</asp:repeater>

  我们通过container.dataitem来获取当前遍历过程中的数据对象,将其转换成comment之后读取它的title和content属性。虽然表达式有些长,但似乎也是个不错的解决方法。性能嘛……肯定是有所提高了。

  但是,在实际开发过程中,我们并不一定能够如此轻松的将某个特定类型的数据作为数据源,往往需要组合两种对象进行联合显示。例如,我们在显示评论列表时往往还会要显示发表用户的个人信息。由于c# 3.0中已经支持了匿名对象,所以我们可以这样做:

protected void page_load(object sender, eventargs e)
{
    list<comment> comments = getcomments();
    list<user> users = getusers();

    this.rptcomments.datasource = from c in comments
                                  from u in users
                                  where c.userid == u.userid
                                  order by c.createtime
                                  select new
                                  {
                                      title = c.title,
                                      content = c.content,
                                      nickname = u.nickname
                                  };
    this.rptcomments.databind();
}

注意:当前容器的数据项:container.dataitem

4、bind()方法的运用,主要应用场景:gridview等可编辑控件的更新操作上。当单击update按钮时,使用 bind 语法绑定的每个控件属性值都会被提取出来,并传递给数据源控件以执行更新操作
bind 方法与 eval 方法有一些相似之处,但也存在很大的差异。虽然可以像使用 eval 方法一样使用 bind 方法来检索数据绑定字段的值,但当数据可以被修改时,还是要使用 bind 方法。

 

在 asp.net教程 中,数据绑定控件(如 gridview、detailsview 和 formview 控件)可自动使用数据源控件的更新、删除和插入操作。例如,如果已为数据源控件定义了 sql select、insert、delete 和 update 语句,则通过使用 gridview、detailsview 或 formview 控件模板中的 bind 方法,就可以使控件从模板中的子控件中提取值,并将这些值传递给数据源控件。然后数据源控件将执行适当的数据库命令。出于这个原因,在数据绑定控件的 edititemtemplate 或 insertitemtemplate 中要使用 bind 函数。

 

bind 方法通常与输入控件一起使用,例如由编辑模式中的 gridview 行所呈现的 textbox 控件。当数据绑定控件将这些输入控件作为自身呈现的一部分创建时,该方法便可提取输入值。

 

bind 方法采用数据字段的名称作为参数,从而与绑定属性关联,如下面的示例所示:

该示例具有一个文本框,用于接受用户输入,这是一个潜在的安全威胁。默认情况下,asp.net 网页验证用户输入是否不包括脚本或 html 元素。有关更多信息,请参见脚本侵入概述。

 

<edititemtemplate>
  <table>
    <tr>
      <td align=right>
        <b>employee id:</b>
      </td>
      <td>
        <%# eval("employeeid") %>
      </td>
    </tr>
    <tr>
      <td align=right>
        <b>first name:</b>
      </td>
      <td>
        <asp:textbox id="editfirstnametextbox" runat="server"
          text='<%# bind("firstname") %>' />
      </td>
    </tr>
    <tr>
      <td align=right>
        <b>last name:</b>
      </td>
      <td>
        <asp:textbox id="editlastnametextbox" runat="server"
            text='<%# bind("lastname") %>'  />
      </td>
    </tr>
    <tr>
      <td colspan="2">
        <asp:linkbutton id="updatebutton" runat="server"
          text="update" commandname="update" />
        &nbsp;
        <asp:linkbutton id="cancelupdatebutton" runat="server"
          text="cancel" commandname="cancel" />
      </td>
    </tr>
  </table>
</edititemtemplate>

 

单击行的 update 按钮时,使用 bind 语法绑定的每个控件属性值都会被提取出来,并传递给数据源控件以执行更新操作。

 

时间: 2024-09-22 22:57:43

asp.net Eval和Bind区别分析的相关文章

jquery中live()方法和bind()方法区别分析_javascript技巧

本文实例讲述了jquery中live()方法和bind()方法区别.分享给大家供大家参考,具体如下: live()不受加载时间顺序的影响,只要查找能够配对上就能够绑定对应的事件,而bind方法只有在第一次被加载的时候才绑定时间,如果代码之后再加载配对的元素,则不能绑定对应的事件 $("#manual_disconnect").live("click", function(){ connectionProfile("0"); }); $("

apache伪静态配置与iis伪静态配置的区别分析对比

apache伪静态配置与iis伪静态配置的区别分析对比 /* 在web开发中,经常会碰以要把php教程,asp教程文件伪静态成htm或其它文件,下面我们要讲一下关于apache伪静态规则与iis中伪静态规则的一些不同的部份了.下面我们先来看看apache伪静态的配置方法. 实例,我们要把 pl.php教程?id=1 page.php?id=1 伪静态成html页面 d-1.html v-1.html <virtualhost 192.168.0.110:801>     serveradmin

ASP.NET Eval进行数据绑定的方法_实用技巧

假设你已经了解ASP.NET Eval 1.1的数据绑定(特别是Container这个局部变量)的机制,这里主要分析ASP.NET Eval 2.0数据绑定做了那些改进. ASP.NET Eval 2.0 的数据绑定函数Eval()简化掉了ASP.NET Eval 1.1神秘的Container.DataItem,比如数据绑定表达式: 复制代码 代码如下: <%# (Container.DataItem as DataRowView)["ProductName"].ToStrin

php echo print print_r三者区别分析

php教程 echo print print_r三者区别分析 echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)  print()    只能打印出简单类型变量的值(如int,string)  print_r() 可以打印出复杂类型变量的值(如数组,对象)  echo     输出一个或者多个字符串 echo -- 输出一个或者多个字符串 定义和用法 echo() 函数输出一个或多个字符串. 语法 echo(strings)参数 描述 str

ASP.NET Eval如何进行数据绑定

ASP.NET Eval在数据绑定方面的应用是众所周知的,不过技术在发展,当ASP.NET Eval 1.1变成ASP.NET Eval 2.0的时候,在操作的时候会有什么变化呢? 假设你已经了解ASP.NET Eval 1.1的数据绑定(特别是Container这个局部变量)的机制,这里主要分析ASP.NET Eval 2.0数据绑定做了那些改进. ASP.NET Eval 2.0 的数据绑定函数Eval()简化掉了ASP.NET Eval 1.1神秘的Container.DataItem,比

JavaScript创建闭包的两种方式的优劣与区别分析

  这篇文章主要介绍了JavaScript创建闭包的两种方式的优劣与区别分析的相关资料,需要的朋友可以参考下 通常JavaScript创建闭包比较常用的有两种方式. 构造函数方式: ? 1 2 3 new function() { var 变量... } 内联执行方式: ? 1 2 3 (function() { var 变量... })(); 在JavaScript内部运行机制下他们有什么区别?用哪种方式创建比较好?它与其它方式创建的闭包相比有什么优势? 我是这样理解的: 区别: 第一个:子方

javascript中callee与caller的区别分析

  javascript中callee与caller的区别分析 有些小伙伴可能会问caller,callee 是什么?在javascript 中有什么样的作用?那么本篇会对于此做一些基本介绍.希望能够对大家理解javascript中的callee与caller有所帮助. callee callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数 首先我们来写个阶成函数: ? 1 2 3 4 5 6 7 function chen(x){ if (x<=1) { retur

U盘与移动硬盘的区别分析

  U盘与移动硬盘的区别分析            一.存储的原理不同. U盘是以半导体材料(芯片)作为存储单元,又叫固体存储器,没有机械部分. 移动硬盘则是以磁性介质作为存储器,有机械部分. 二.能耗不同. U盘没有机械部分,需要提供的能量相比小得多,一般不会超过 100mA,而移动硬盘耗能相对较大,有的时间一个USB口提供的电流不能很好的保证其正常运行,因此移动硬盘一般配的数据线都是可以查两个USB端口,甚至需要配置专门的电源.这也是有的移动硬盘不正常工作的主要原因. 三.体积不同. 这点也

C#命名空间与java包的区别分析

  C#命名空间与java包的区别分析         这篇文章主要介绍了C#命名空间与java包的区别,较为详细的分析了C#命名空间与java包的相同点与不同点,非常具有实用价值,需要的朋友可以参考下 本文实例分析了C#命名空间与java包的区别.分享给大家供大家参考.具体分析如下: 相同点: 1.都是为了重用性(reusebility)--软件工程中一个非常重要的目标. 2.C#里面的命名空间和java中的包都属于访问权限的控制机制. 不同点: 1.C#命名空间只是一种逻辑上的结构,它允许所