ASP.NET 4.5新特性之新的模型绑定方式

2012 年 9 月 8 日6480

【IT168技术】ASP.NET 自推出从1.0发展到4.0以来,在每个版本都有很重要和实用的功能推出,比如在1.0到2.0时代,使用了web控件的方式大大方便了开发者的开发,而在3.5中,又出现了很多新的功能,比如Heal Monitoring健康检查等。在4.0版本中,借鉴了开源阵营众多MVC框架思想,提供了ASP.NET MVC的框架,让Web开发者更得心应手的开发。

  但程序员发现,在开发象数据模型驱动一类的应用时,需要编写不少代码,有时会很复杂,借助最新发布的ADO.NET Entity Framework框架,用户可以在对象模型转化为数据库对象这一步骤中减少一定的步骤和代码量。但随着ASP.NET 4.5的发布(目前是preview版本),在数据模型绑定这一方式上,又将有重大的变革。本文将以简单的例子讲解在asp.net 4.5中这一新特性的应用。本文的阅读对象建议为对ASP.NET 4.0有使用经验的读者。

  ASP.NET 4.5中模型绑定

  在A SP.NET 4.5中,我们可以直接将数据模型层中的模型直接跟相关的数据绑定控件和CRUD(增删改查操作)、分页操作进行绑定,但它跟ObjectDataSource控件和ASP.NET MVC中的模型绑定是有所不同的。要注意的是,asp.net 4.5 是基于.NET 4.5的,读者可以安装Visual Studio 2011 preview版本

  (http://www.microsoft.com/download/en/details.aspx?id=27538可以下载)。如果要对ASP.NET 4.5的新特性有全面了解,可以参考如下的这篇文章(http://www.asp.net/vnext/whats-new)。

  首先,我们来看ASP.NET 4.5中的新特性“Web表单的模型绑定”。在之前的版本中,web表单中的数据绑定,用的都是“Eval”的方法。在运行时期间,通过调用Eval方法,利用反射的原理去处理当前要绑定的数据对象,并读取其中Eval方法中指定名称的成员的值。关于为什么Eval方法的这种绑定形式是有害处的,可以参考如下这篇文章

  (http://www.devcurry.com:80/2011/02/how-to-avoid-databindereval-in-aspnet.html)。

  而在ASP.NET 4.5中,模型绑定的方式有了相当大的改进,我们通过下面的若干个步骤,来了解新的模型绑定方式有很什么不同:

  在本文中,我们使用的是Sql server 2008 R2版本,使用了其中的”Company”示例数据库作示范,其中有两个如下的表:

  Department表 - DeptNo (int) Primary Key, Dname (varchar(50)),Location (varchar(50)).

  Employee表 - EmpNo (int) Primary Key, EmpName (varchar(50)),Salary (int), DeptNo(int) Forwign Key.

  下面我们正式开始实做的步骤:

  1) 打开Visual Studio 2011 preview版本,新创建一个web应用工程,将其命名为“ASPNET45_ModelBinding”。

  2) 在工程中,分别新增两个文件夹,一个名为Model,一个名为Department。在Department文件夹中,新增加两个web页面(注意都勾选上带master page功能),分别命名为

  Deparment.aspx和Departmentdetail.aspx。

  3) 在Model文件夹中,新增加一个ADO.NET实体对象模型,将其命名为CompanyEDMX.edmx。在其增加的向导中,注意选择Company数据库并选择Department和Employee表。在创建完毕后,如下图所示:

ASPL.NET 4.5新特性之新的模型绑定方式

  4) 在代码视图中,打开Department.aspx页面,增加一个Repeater控件,将其与Department数据模型进行绑定。 代码如下:

ASPL.NET 4.5新特性之新的模型绑定方式

  在上面的代码中,请留意跟以往版本的ASP.NET 的不同,其中,在repeater控件中,使用了ModelType属性,指定了要将Deparment数据模型实体跟repeater控件进行绑定。ModelType属性在所有的数据绑定控件中,都是可以使用的。这个新特性可以允许我们去定义那些绑定在控件中的数据类型和能让我们在控件中绑定模型的属性。可以看到,我们现在可以不用象以前那样,写复杂的DataBinder.eval,而是直接通过

  就可以直接输出数据模型Department中的属性了。 

0 0