深入ASP.NET数据绑定(下)——多样的绑定方式

在这个系列的上篇中介绍了数据绑定语法的原理以及.NET中如何实现单向绑定,中篇我们简单的介绍 了ASP.NET 2.0 中新增的Bind语法配合DataSourceControl来实现数据的自动双向绑定。这两部分的内容 相对动态抽象并且不常接触,没有很好的源代码支持很难解释清楚,要想真正弄清它们的内部原理,还需 要大家亲自动手去反编译分析动态编译的程序集。

在了解了数据绑定语法的原理后,我还想来谈谈我中实践过程中遇到的一些问题以及其它实用的绑定 技巧。首先我们就来说说,特殊字段名的问题。我们知道在数据库当中,如果表名或字段名中包含有一些 特殊的不能是合法的字符时,都会使用[]将它们引起来,以便他们能够正常使用。但是在<%# Eval ("")%>的绑定语句当中,同时可以使用[],但是对于字段名中包含 "(",")","[","]"这4个字符却始终 运行出错。假设像我下面这样来绑定"电压(V)":

<%# Eval("电压(V)")%>

那么就会得到一个运行时错误:

DataBinding:“System.Data.DataRowView”不包含名为“电压”的属性。

表明括号是被认为是一个特殊字符,那我们如果给字段名加上[],如下:

<%# Eval("[电压(V)]")%>

此时,我们会得到另一个运行时错误:

电压(V 既不是表 DataTable1 的 DataColumn 也不是 DataRelation。

表明,即使加上[]也无法解决这个特殊字段名的问题。同时字段名中如果也存在中括号,也是会出现 这样的问题的。但是这样的字段名却在GridView的自动生成列中能被正常绑定呢?问题会出现在哪里呢? 分析和对比GridView的自动生成列与Eval这样的绑定语法在最终执行绑定代码上的不同,我们可以发现, GridView的自动生成列取值并不是使用DataBinder.Eval这个方法,它内部有自己的取值方式,但是在实 现上却是大同小异的。那究竟是在哪里出现了问题呢?我们找出DataBinder类的定义:

时间: 2024-11-02 17:05:09

深入ASP.NET数据绑定(下)——多样的绑定方式的相关文章

详解ASP.NET Core MVC四种枚举绑定方式

前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便,之前我们探讨过在ASP.NET MVC中下拉框绑定方式,这节我们来再来重点看看枚举绑定的方式,充分实现你所能想到的场景,满满的干货,你值得拥有. 探讨枚举绑定方式 我们首先给出要绑定的枚举类. public enum Language { JavaScript, Java, C, Python, SQL, Oracle } 枚举绑定方式一(@Html.DropDownList) 接下来我们废话少说直接进入主题. 复制代

深入ASP.NET数据绑定(中)——数据双向绑定机理

在上一篇<深入ASP.NET数据绑定(上)>中,我们分析了在.NET中的数据绑定语法的一些内部机理. 简单说来就是ASP.NET在运行时为我们完成了页面的动态编译,并解析页面的各种服务器端代码,包括数 据绑定语法.而数据绑定的语法虽是一些<%# %>代码块,在生成的代码中,仍然使用了服务器端控 件以及在DataBinding事件调用DataBinder.Eval方法来完成数据的绑定工作.所有的数据绑定模板控件都 使用了这样的机制来进行数据的单向绑定,在.NET 2.0中新增了双向的

绑定Enum到ASP.NET数据绑定控件的完美解决方案

本文向读者介绍NBear中实现的DropDownListField字段绑定控件和EnumDescriptionAttribute特性.结合使用这两个组件,就可以最简单.易用和可扩展地完美解决绑定Enum到ASP.NET数据绑定控件的问题.[05/26修订]--增加支持第三方枚举描述,支持二进制与过的枚举值. 从DropDownListField的名称,大家一定猜到了,是的,DropDownListField控件和ASP.NET内置的BoundField,CheckBoxField等一样,可以直接

asp.net学习之 数据绑定控件--表格绑定控件

原文:asp.net学习之 数据绑定控件--表格绑定控件     数据绑定 Web 服务器控件是指可绑定到数据源控件,以实现在 Web 应用程序中轻松显示和修改数据的控件.数据绑定 Web 服务器控件是将其他 ASP.NET Web 控件(例如 Label 和 TextBox 控件)组合到单个布局中的复合控件.     例如,诸如 DetailsView 控件等数据绑定控件可绑定到一个结果集,例如,包含每个雇员的姓名.地址.职务等信息的雇员表.在 DetailsView 控件中,可以将 Labe

ASP.NET教程:汇总前台代码绑定后台变量的方法

经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有<%= str%>和<%# str %>两种方式,这里简单总结一下.如有错误或异议之处,敬请各位指教. 一方面,这里所讲的前台即通常的.aspx文件,后台指的是与aspx相关联的CodeBehind,文件后缀名为.aspx.cs:另一方面,这里的绑定是指用户发出访问某一页面指令后,服务器端在执行过程中就已经将前台代码进行了赋值,而后生成html格式回传客户端显示,而并非已经显示到客户端后,然后通过其他方法(如aja

深入ASP.NET数据绑定(上)

在ASP.NET我们在使用Repeater,DetailsView,FormView,GridView等数据绑定模板时,都会使用 <%# Eval("字段名") %>或<%# Bind("字段名") %>这样的语法来单向或双向绑定数据.但是 我们却很少去了解,在这些语法的背后,ASP.NET究竟都做了哪些事情来方便我们使用这样的语法来绑定 数据.究竟解析这样的语法是在编译时,还是运行时?如果没有深入去了解,我们肯定不得而知.这个简 短的系列文

深入ASP.NET数据绑定

在ASP.NET我们在使用Repeater,DetailsView,FormView,GridView等数据绑定模板时,都会使用<%# Eval("字段名") %>或<%# Bind("字段名") %>这样的语法来单向或双向绑定数据.但是我们却很少去了解,在这些语法的背后,ASP.NET究竟都做了哪些事情来方便我们使用这样的语法来绑定数据.究竟解析这样的语法是在编译时,还是运行时?如果没有深入去了解,我们肯定不得而知.这个简短的系列文章就是带

数据绑定技术—将Hashtable绑定到RadioButtonList Web控件

void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) { // 创建 Hashtable 对象并填充数据 Hashtable hash = new Hashtable(); hash.Add("北京", "010"); hash.Add("广州", "020"); hash.Add("上海", "021")

asp.net-asp实现下拉框级联时出现第二个框一直不断积累的情况

问题描述 asp实现下拉框级联时出现第二个框一直不断积累的情况 比如,第一个下拉框选择华北,第二个下拉框出现:北大,北师大第一个框再选华中,第二个就会出现北大,北师大武大第一次的结果没有删除,要怎么实现?附上代码,各位高手帮我看一下吧,而且想实现第一个框为空的话,第二个框出来全部学校怎样实现? 在index.aspx中 选择地区: -请选择地区-/asp:ListItem/asp:DropDownList选择学校:-请选择学校-/asp:ListItem/asp:DropDownList在ind