知识大全 asp.net bind()和eval()的区别

Posted

篇首语:盛年不重来,一日难再晨,及时当勉励,岁月不待人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 asp.net bind()和eval()的区别相关的知识,希望对你有一定的参考价值。

    eval()方法        在运行时使用反射执行后期绑定计算 因此与标准的ASP NET数据绑定方法bind相比 会导致性能明显下降 它一般用在绑定时需要格式化字符串的情况下 多数情况尽量少用此方法        Eval 方法是静态(只读)方法 该方法采用数据字段的值作为参数并将其作为字符串返回 Bind 方法支持读/写功能 可以检索数据绑定控件的值并将任何更改提交回数据库         使用 Eval 方法        Eval 方法可计算数据绑定控件(如 GridView DetailsView 和 FormView 控件)的模板中的后期绑定数据表达式 在运行时 Eval 方法调用 DataBinder 对象的 Eval 方法 同时引用命名容器的当前数据项 命名容器通常是包含完整记录的数据绑定控件的最小组成部分 如 GridView 控件中的一行 因此 只能对数据绑定控件的模板内的绑定使用 Eval 方法         Eval 方法以数据字段的名称作为参数 从数据源的当前记录返回一个包含该字段值的字符串 可以提供第二个参数来指定返回字符串的格式 该参数为可选参数 字符串格式参数使用为 String 类的 Format 方法定义的语法         关于eval()效率        庸置疑的是强类型转换Container的效率是最高的 Eval最终是调用DataBinder Eval方法 DataBinder Eval是采用反射来获取数据的 这显然不如强类型数据转换         我们可以比较一下各种方法         ((Type)   Container DataItem) Property        这种方法效率是最高的 因为不存在任何反射         其次是         ((Type)   GetDataItem()) Property        这种方法效率差的原因在于多了一个Stack的Peek操作 当然 实际上这点儿差别可以忽略         最后是     Eval或者DataBinder Eval 这两种方法都使用反射来查找属性或者索引器成员 效率大打折扣         另外一个值得注意的问题是 所有实现了INamingContainer接口的Control 都应该实现IDataItemContainer接口 因为在Control DataBind的时候 如果发现控件实现了INamingContainer接口 就会试图去寻找它的DataItem 如果这个控件没有实现IDataItemContainer 则DataBinder GetDataItem方法会使用反射看看控件有没有一个叫做DataItem的属性成员 显然这不是我们希望看到的         其实ASP NET还有一个标记接口 INonBindingContainer 实现了INamingContainer接口的控件可以选择同时实现这个来命令ASP NET不去寻找DataItem 可是很可惜 不知道微软出于什么目的 这个接口是internal的……        其实效率方面不必太重视了 Eval表达式很好看的 即使有那么极端的重视效率 GeDataItem也是不错的选择 毋庸置疑的是强类型转换Container的效率是最高的 Eval最终是调用DataBinder Eval方法 DataBinder Eval是采用反射来获取数据的 这显然不如强类型数据转换         eval()绑定方法        x中的数据绑定语法        代码如下        <asp:Literal id= litEval runat= server Text= <%#DataBinder Eval(Container DataItem userName )%> />        x简化Eval数据绑定语法        代码如下        <asp:Literal id= runat= server Text= <%Eval( userName )%> />        第二种方法的方法重载        代码如下        <a <%# Eval( userId Default aspx?id= )%> ><%# Eval( userName ) %></a>        eval同时绑定两个值        代码如下        <a <%# string Format( Default aspx?id= &role= Eval( userId ) Eval( userRole ))%> ><%# Eval( userName ) %></a>         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 方法采用数据字段的名称作为参数 从而与绑定属性关联 如下面的示例所示        Bind 方法通常与输入控件一起使用 例如由编辑模式中的 GridView 行所呈现的 TextBox 控件 当数据绑定控件将这些输入控件作为自身呈现的一部分创建时 该方法便可提取输入值         Bind 方法采用数据字段的名称作为参数 从而与绑定属性关联 如下面的示例所示         代码如下        <EditItemTemplate>        <table>        <tr>        <td align=right>        <b>Employee ID:</b>        </td>        <td>        <%# eval_r( 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= >        <asp:LinkButton ID= UpdateButton RunAt= server         Text= Update CommandName= Update />        <asp:LinkButton ID= CancelUpdateButton RunAt= server         Text= Cancel CommandName= Cancel />        </td>        </tr>        </table>        </EditItemTemplate>        单击行的 Update 按钮时 使用 Bind 语法绑定的每个控件属性值都会被提取出来 并传递给数据源控件以执行更新操作         使用 DataBinder Eval        ASP NET 提供了一个名为 DataBinder Eval 的静态方法 该方法计算后期绑定的数据绑定表达式 并将结果格式化为字符串(可选) 利用此方法 可以避免许多在将值强制为所需数据类型时必须执行的显式强制转换操作         例如 在下面的代码片段中 一个整数显示为货币字符串 使用标准的 ASP NET 数据绑定语法 必须首先强制转换数据行的类型以便检索数据字段 IntegerValue 然后 这将作为参数传递到 String Format 方法         代码如下        <%# String Format( :c ((DataRowView)Container DataItem)[ IntegerValue ]) %>        将此语法与 DataBinder Eval 的语法进行比较 后者只有三个参数 数据项的命名容器 数据字段名称和格式字符串 在模板化列表中(如 DataList 类 DataGrid 类或 Repeater 类) 命名容器始终是 Container DataItem         代码如下        <%# DataBinder eval_r(Container DataItem IntegerValue :c ) %>        格式字符串参数是可选的 如果它被忽略 DataBinder Eval 将返回类型对象的值 如下面的示例所示         代码如下        <%# (bool)DataBinder eval_r(Container DataItem BoolValue ) %>        当对模板化列表中的控件进行数据绑定时 DataBinder Eval 特别有用 因为数据行和数据字段通常都必须强制转换         在TemplateField模板中为了能够有限制的或者取出数据库中某列的值时 可以用Bind和Eval方法来实现 以下是Bind方法的格式 Eval的格式也是和Bind一样的 Bind( 列的名称 显示的格式文 )        比如我们要取个日期型的数据 在数据库中列名是updated 数值是 / / 但是想 年 月 日这样显示 我们可以这样来写Bind( updated :yyyy年MM月dd日 ) Eval也是如此         两者都能读取数据中的值 并显示 当我们使用编辑更新操作时 Bind能够自动的将修改的值更新到数据库中 并显示出修改后的值 但是用了Eval却只能得到错误画面 新的数据没有更新到数据库中         从这点看来 Bind方法和Eval方法的区别就是 Bind方法在读取和更新数据这 方面都是可以 但是Eval方法只能读取显示数据 所以 我们在选择Bind方法和Eval方法的时候 必须要有争对性 当数据肯定需要更新操作的时候我们应该使用Bind 只是显示数据 不会有任何操作的就可以使用Eval方法         bind()和eval()区别        Eval是只读数据 Bind是可更新的         当对次表达式操作时候 必须用Eval 如<%# Eval( 字段名 ) ToString() Trim() %>        若GridView中绑定列里面 设置 内容格式 DataFormateString = :d 则 必须把 属性 HtmlCode 设置为false 否则无法起作用         Eval 单向绑定 数据是只读的        Bind 双向绑定 数据可以更改 并返回服务器端 服务器可以处理更改后的数据 如存入数据库 cha138/Article/program/net/201311/13337

相关参考

知识大全 asp.net中DataBinder.Eval的用法总结

asp.net中DataBinder.Eval的用法总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 ASP.NET和ASP的区别

ASP.NET和ASP的区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET拥有更好

知识大全 ASP.NET的GET和POST的区别

ASP.NET的GET和POST的区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 ASP.NET与ASP编译与解释的区别

ASP.NET与ASP编译与解释的区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  年月Mic

知识大全 ASP.NET谈三层结构与MVC模式的区别

ASP.NET谈三层结构与MVC模式的区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在CS

知识大全 IIS处理Asp.net请求和 Asp.net页面生命周期

IIS处理Asp.net请求和Asp.net页面生命周期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 jQuery绑定事件之live()、bind()方法介绍

jQuery绑定事件之live()、bind()方法介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 .NET 、 C# 和 ASP.NET 的关系

.NET、C#和ASP.NET的关系  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  有个初学NE

知识大全 ASP.NET开发要抛弃ASP旧习和破烂[1]

ASP.NET开发要抛弃ASP旧习和破烂[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使

知识大全 ASP.NET开发要抛弃ASP旧习和破烂[2]

ASP.NET开发要抛弃ASP旧习和破烂[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对