首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 技术专题 | 电子书下载 | 教学视频 | 网页设计 | 平面设计 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> ASP.NET >> 文章正文

支持入门—ASP.NET常用技巧

文章来源csdn博客 作者阿不 更新时间2008-5-12 保存本文保存本文 推荐给好友推荐给好友 收藏本页收藏本页

   1: [DebuggerNonUserCode]
   2: public IOrderedDictionary __ExtractValues__control7(Control __container)
   3: {
   4:     TextBox box = (TextBox) __container.FindControl("textBox1");
   5:     OrderedDictionary dictionary = new OrderedDictionary();
   6:     if (box != null)
   7:     {
   8:         dictionary["[电流{a}]"] = box.Text;
   9:     }
  10:     return dictionary;
  11: }

    由上面的代码片段可以了解到,ASP.NET动态编译器是将Bind语法拆分为两部分:绑定输出和读取输入控件值。绑定输出部分与前篇介绍的机制是完全一样的,并且也是调用DataBinder.Eval方法来绑定数据;而读取输入控件值则是会根据页面上控件的类型,以及绑定的控件属性名称,生成一段强类型的控件属性读取代码,并将控件的值保存到dictionay中返回出去。而它全然不知,容器控件是如何将这些值合并起来传给对应的DataSouceControl控件的。

    关于数据容器控件而何与DataSouceControl协同工作,并不是我们这里要分析的重点。但是我们可以简单的描述一下工作流程,以DetailsView的数据更新为例:大家通过反编译DetailsView的源码,会找到名称为HandleUpdate的私有方法,在这个方法里面会去处理数据项更新前的值(至于在Web环境中如何保存更新前的值,就需要靠ViewState的强大功能了),和更新后的值(通过ExtractRowValues函数调用类似上面生成的__ExtractValues__control7代理函数来收集所有双向绑定字段的值存到NewValues里面),并将他们分别保存在两个不同的IOrderedDictionary对象(OldValues,NewValues)中。然后将调用对应的DataSouceView的Update方法,传入原字段值和新字段值和一些必须的参数,即可由我们通过重写DataSourceView的方法来得到所有需要更新字段的原始值和新值,并可以对比比较哪些字段值是否发生了变化。NBearDataSource控件就是利用了这样的机制来直接重DataSourceControl和DataSourceView来达到数据的全自动修改和添加方案的。

    这里还有一点不得不说,在GridView,DetailsView,并不一定需要使用<%# Bind("")%>语法来实现数据的双向绑定,他们的字段双向绑定可以通过BoundField及它的子控件代替模板控件的绑定语法,一样可以达到双向绑定的目的,简单但没有模板来得灵活。而在存取不同版本的字段值也是类似的机制。

    由于这部分涉及到的都是动态和内部代码,如果没有亲自去阅读这些代码,估计还是很难理解。最后我们再来简单总结一下:ASP.NET在模板中双向绑定字段,是通过<%# Bind() %>这样的语法,但是Bind我们更应该把它理解为是一个关键字,而不是一个函数。因为在ASP.NET的控件中,并没有存在这个函数。ASP.NET运行时在编译页面代码时,会把Bind关键字的代码当成两部分来编译:一部分是单向绑定代码;另一部分而是读取对应输入控件的绑定属性,以绑定字段名为Key,添加到IOrderedDictionary中收集返回给数据容器控件(GridView,DetailsView,FormView)等,让它们处理。

总体来说,ASP.NET 2.0的双向绑定机制给我们在提交数据时带来了极大的方便,尽管有些人很排斥DataSourceControl的模式,但是我们不可否认合理应用会大大提高我们的开发效率。希望通过这两篇的介绍,我们能对ASP.NET数据绑定机制有更多的认识。在下一篇的文章中,我们将会介绍一些关于数据绑定方式,性能,以及对字段名的局限性等相关主题。

上一页  [1] [2] 

【责编:Ken】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题
 ·展现C#世界 C#程序设计专题
 ·Java入门 Tomcat的配置技巧精华专题
 ·Oracle RMAN物理备份技术详解
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航