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

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

事件的起因是,我希望动态的为Repeater控件添加行项模板,我可以通过实现ITempate接口的方式来 动态添加行模板。并希望它通过普通的页面绑定语法来完成数据字段的绑定功能,如下就是一个简单的例 子:

1: /// <summary>
2: /// Summary description for DynamicTemplate
3: /// </summary>
4: public class DynamicTemplate : ITemplate
5: {
6:     public DynamicTemplate()
7:     {
8:         //
9:         // TODO: Add constructor logic here
10:         //
11:     }
12:     #region ITemplate Members
13: 
14:     public void InstantiateIn(Control container)
15:     {
16:         TextBox textBox = new TextBox();
17:          textBox.Text = @"<%# Eval(""ID"") %>";
18:         container.Controls.Add(textBox);
19:     }
20:     #endregion
21: }

在这个例子中,我在模板中添加了一个TextBox控件,并指定它的绑定字段是“ID”。但是这做法,能 否实现我们实现我们需要的功能呢?答案是否定,每一行的TextBox的值都是"<%# Eval(""ID"") % >",而不会像我们希望的那样去绑定ID字段。从结果来分析原因,我们可以非常容易得出,这段绑定 语法并没有得到ASP.NET运行时的承认,那么页面中使用相同的语法为什么可以呢?故事就是从这里开始 的。

我们首先要去了解下,在页面中使用这样的语法ASP.NET都为我们做了哪些事情呢?要了解这个,我们 要找到.aspx文件在首次运行时动态编译的程序集。

我们都知道,在ASP.NET运行时,也会把.aspx文件编译成一个动态类,这个类是继承于.aspx的Page指 令中Inherits属性指定的类并且同时也直接实现了IHttpHandler接口。这个动态类会负责创建页面中使用 的各种服务器端控件的实例,并且ASP.NET运行时会负责解析的编译.aspx中存在的服务器端代码(包括绑 定语法)并将这些代码编译到这个页面类。WebSite工程和Web Application在页面文件上有些不同, WebSite工程的每个页面最多可以有两个文件:.aspx和.aspx.cs文件;而在Web Application还可以包 括.aspx.designer.cs文件,这个文件所起的作用也非常有限,也就是为了能在页面代码中使用服务器端 、控件实例而定义的一个实例变量,仅此而已。所以在设计时WebSite具备更多的动态行为,而在运行时 WebSite工程和Web Application并没有太大区别。

如何得到页面的动态类呢?要首先得到这个页所在的动态程序集,在Vista以前的操作系统上,一般是 在:%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 文件夹下,而在 Vista中,而会在:%USERPROFILE%\AppData\Local\Temp\Temporary ASP.NET Files下。那么如何快速得 到程序集的路径和名称?你可以让你的Web工程动态编译出错(比如重复的类名),就可以快速定位到当 前动态程序集的目录了。

时间: 2024-09-14 12:48:14

深入ASP.NET数据绑定(上)的相关文章

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

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

ASP.NET数据绑定之GridView控件_实用技巧

GridView 是 DataGrid的后继控件,在.net framework 2 中,虽然还存在DataGrid,但是GridView已经走上了历史的前台,取代DataGrid的趋势已是势不挡. 作用:其功能是在web页面中显示数据源中的数据.GridView和DataGrid功能相似,都是在web页面中显示数据源中的数据,将数据源中的一行数据,也就是一条记录,显示为在web页面上输出表格中的一行.     在此GirdView的详细属性和事件我不再阐述.下面我只是简单介绍一下GirdVie

强类型ASP.NET数据绑定改进“.NET研究”版

相关文章:教你30秒打造强类型ASP.NET数据绑定.强类型ASP.NET数据绑定改进版之第2版 看了dragonpig写的"教你30秒打造强类型ASP.NET数据绑定",眼前一亮,真是太给力了,原来还可以这样进行数据绑定. 立即小试了一下,并进行了一些改进,目前已经应用于Home中的新闻栏目.下面分享一下改进心得. 使用传统的ASP.NET数据绑定方法,有两个地方一直让人不爽: 1) 缺少智能感知: 2) 强制类型转换. 先回味一下传统的ASP.NET数据绑定: 看看上面的ToStr

一起谈.NET技术,强类型ASP.NET数据绑定改进版

相关文章:教你30秒打造强类型ASP.NET数据绑定.强类型ASP.NET数据绑定改进版之第2版 看了dragonpig写的"教你30秒打造强类型ASP.NET数据绑定",眼前一亮,真是太给力了,原来还可以这样进行数据绑定. 立即小试了一下,并进行了一些改进,目前已经应用于Home中的新闻栏目.下面分享一下改进心得. 使用传统的ASP.NET数据绑定方法,有两个地方一直让人不爽: 1) 缺少智能感知: 2) 强制类型转换. 先回味一下传统的ASP.NET数据绑定: 看看上面的ToStr

ASP实例:一个简单的ASP无组件上传类

简单的ASP无组件上传类,发出来让大家看看.可以做做实验! 以下为引用的内容: <%@ language="javascript"%><%var self = Request.serverVariables("SCRIPT_NAME");if (Request.serverVariables("REQUEST_METHOD")=="POST"){        var oo = new uploadFile(

ASP:利用ASP把图片上传到数据库

ASP(Active Server Pages)是Microsoft很早就推出的一种WEB应用程序解决方案,也是绝大多数从事网站开发人员很熟悉的一个比较简单的编程环境.通过ASP我们可以创建功能强大的动态的WEB应用程序.ASP虽然功能很强大,但有些功能用纯ASP代码完成不了,为了能保证开发出功能更加强大的WEB应用程序,我们可以借助调用COM组件. 在日常工作中,例如开发一个"商品网上销售系统"吧,为了使顾客对商品的外观有所了解,也就是顾客在看商品的文字介绍的同时在文字的旁边有该商品

Asp无组件上传带进度条(续)

上传|无组件 几个月前,写过一篇关于Asp无组件上传带进度条的Blog,当时主要分析了一下通过Web文件上传并在后台获取分析数据的实现原理.其中实现进度条的根本就是要实现分块获取数据,根据分块大小和块数记录已上传大小.还有一些具体的细节问题当时并没有说清楚: Q: 进度信息如何访问?A: 进度信息保存在Application中,每次上传时生成一个进度ID,根据这个进度ID可以检索Application中的当前上传进度信息. Q: 进度信息以什么形式保存在Application中?A: Asp太弱

ASP无组件上传错误 ASP 0104的解决方法

错误|解决|上传|无组件 问题描述:ASP无组件上传程序无法上传较大的文件"Request 对象 错误 'ASP 0104 : 80004005'",(大概大于100kb就不行),但是原先在2000 server中可以上传5m左右的文件. 解决方法:在IIS属性中选中"允许直接编辑配置数据库",然后.在服务里关闭iis admin service服务找到windows\system32\inesrv\下的metabase.xml编辑其中的ASPMaxRequestE

ASP跨服务器上传文件完美解决

服务器|解决|上传 如果你有两个空间,一个大而慢,另外一个小而快,或者其中一个不支持FSO,那么跨服务器上传文件这个问题就摆在你面前了,下面就是我在解决ylog.net里面的跨服务器上传文件的日记,这个问题看似简单,里面的细节问题却是非常有趣 前提条件,空间都必须支持ASP,上传文件的服务器支持FSO,下面的叙述中,diygame.com为存上传文件的服务器,ylog.net为网站服务器,即显示用户界面的服务器... 实现功能,文件上传,上传后在网页的文本区域自动加上对于图片的UBB码,为了清楚

当ASP.NET撞上JSF之应用程序的国际化

asp.net|js|程序 国际化,是指在你的应用程序中支持多种语言和文化.这包括提供本地化的文本消息和格式(例如日期),以便在世界不同地方的用户能够以一种他们理解的格式和语言来观看你的web页面.随着全球web的不断增长,这种类型的功能也变得日益重要.我们将快速地看一下每个框架如何允许你外在化页面文本(例如域标签)以提供不同的本地化支持. 支持不同的本地化的JSF应用程序与其它J2EE应用程序实现方式差不多使用一样的实现方式-通过把本地文本数据存储到一个资源包属性文件中.你将对每一种本地化支持