Asp.Net Mvc Beta新特性之自动绑定(2)-深入探索篇

在上篇中介绍了自动绑定的基本用法,在本篇中,我们将深入了解自动绑定的工作原理.

自动绑定的确是让人感到兴奋的特性,然而,为了让它可以在我们的项目中更好的工作,我们有必要深入了解如何更进一步细调该特性以及它是如何工作的.而本文正式即将揭开这个谜底.

为了更好的了解该特性,我们有必要到codeplex去下载一份asp.net mvc的源代码并分析之,在本文写作的时候,codeplex上已经放上了beta版的源码,如果想进一步了解的朋友可以下载并对照本文分析.

在beta版中,新增了自动绑定这一特性,并对绑定特性做了一定的修改

新增BindAttribute:自动绑定特性设置

修改DefaultModelBinder:自动绑定的实现部分

修改ControllerActionInvoker:绑定的调用入口

新增ModelBinderContext,封装绑定所需数据

新增BinderResult,封装绑定结果

其他不大重要的修改略过

我们一步步来分析绑定的执行过程,首先肯定在ControllerActionInvoker中,看到GetParameterValue方法:


这儿便是对每个参数都尝试调用ModelBinder来绑定参数,这儿的GetModelBinder方法和P5的一样,在我们自定义ModelBinder的情况下可以进行自定义绑定,然而在自动绑定的时候获取的则是DefaultModelBinder,然后在GetPropertyFilter方法中通过查阅BindAttribute来获取关于绑定的设置.最后对数据进行绑定.

关键的,我们需要对DefaultModelBinder进行分析,然而在此之前,还有一个类也是需要我们仔细看看的,那就是BindAttribute,该特性是用来修饰参数的,它有4个重要的属性:Include,Exclude,Prefix和一个方法:IsPropertyAllowed,分别用来设定:绑定的字段,不绑定的字段,参数前缀和判断给定的字段是否设定运行绑定,且该方法会作为一个Predicate<string>委托封入ModelBinderContext传入BindModel方法.

现在来讨论使用默认绑定的情况,首先给出DefaultModelBinder的所有方法:

时间: 2024-12-31 10:32:53

Asp.Net Mvc Beta新特性之自动绑定(2)-深入探索篇的相关文章

Asp.Net Mvc Beta新特性之自动绑定(1)-体验篇

我们知道,在Asp.Net Mvc Preview5中加入了全新的ModelBinder特性,虽然这个特性非常的强大,但是使用起来并不是那么的友好,因此,在最新的Asp.Net Mvc Beta中,框架对这部分进行了进一步的加强,使得复杂参数的自动绑定得以实现,本文将分级部分完整探讨整个mvc框架中的modelbinder实现和完全挖掘系统自带的ModelBinder的能力,使得基于mvc框架的web开发脱离页面取值的苦海. (参见: http://www.cnblogs.com/leven/a

ASP.NET MVC Beta新特性之IValueProvider

在刚发布的ASP.NET MVC Beta版中,在UpdataModel方法中提供了一个带有IValueProvider参数的重载.那么这个IValueProvider有什么用呢? 我们先来看一个简单的场景,例如我们的blog系统有一个Post的对象,Post对象有一个Tags属性和Categories属性,他们的类型分别是: Post.Tags : StateList<string> (BlogEngine.NET 中的一个List<T>的扩展类型) Post.Categorie

ASP.NET MVC 1.1 _VS2010 &amp; ASP.NET MVC 2 新特性

ASP.NET MVC 1.1 on Visual Studio 2010 Beta1 由于 VS2010 Beta的发布,所以ASP.NET MVC在Codeplex上发布了一个专门为其准备的ASP.NET MVC版本: http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28527   关于ASP.NET MVC 2.0   另外在ASP.NET MVC Roadmap 中提到了关于ASP.NET MVC 2.0

ASP.NET MVC 3 Beta新特性以及.Net开源的趋势----最新译文

NuPack – .NET的开源软件包管理器 NuPack是一个开源的软件包管理器,它使你在项目中能够更加容易的查找.安装和使用.NET 库.它能够和所有的.NET 项目类型很好的一起工作(包括,没有任何限制的,ASP.NET Web Forms和ASP.NET MVC). NuPack 使维护开源项目的开发者(例如, Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks, Elmah, 等等) 能够去打包他们的库,

一起谈.NET技术,ASP.NET MVC 3 Beta新特性以及.Net开源的趋势----最新译文

NuPack – .NET的开源软件包管理器 NuPack是一个开源的软件包管理器,它使你在项目中能够更加容易的查找.安装和使用.NET 库.它能够和所有的.NET 项目类型很好的一起工作(包括,没有任何限制的,ASP.NET Web Forms和ASP.NET MVC). NuPack 使维护开源项目的开发者(例如, Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks, Elmah, 等等) 能够去打包他们的库,

ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator

对于ASP.NET MVC基于标注特性的Model验证,很多人只知道应用在数据类型及其属性上用于定义验证规则和错误消息的ValidationAttribute.通过<ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator>的介绍,我们知道了最终用于进行Model验证的是一个叫做ModelValidator的组件.ValidationAttribute对应的ModelValidator为DataAnnotationsModelValidat

ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidatorProvider

DataAnnotationsModelValidator最终是通过它对应的ModelValidatorProvider,即DataAnnotationsModelValidatorProvider创建的.通过前面的介绍我们知道它是AssociatedValidatorProvider的子类,后者在用于获取ModelValidator的GetValidators方法中已经根据指定的Model元数据所有特性创建出来,DataAnnotationsModelValidator只需要从中筛选出继承自V

面试题:ASP.NET2.0的新特性?

问题描述 ASP.NET2.0的新特性?像这种面试题该怎么答,用不着把2.0中增加的服务器控件和功能全部阐述一边吧! 解决方案 解决方案二:还有这种面试题,如果我是直接从ASP.NET2.0学的呢强烈BS招聘的解决方案三:up解决方案四:不合理,问这种问题的就是知道从旧的看新的.不能抛弃以前的.新特征很多了.如:加入的profile,GridView,泛类型等等.解决方案五:新特性.....我认为问这问题意义不大的样子,大家同意不.我确实也不知道怎么答好,不过也更表示我对新老版没有太多的研究和了

Asp.net mvc 3 beta 新特性介绍

国庆放假归来,刚好赶上asp.net mvc 3 beta发布,和大家分享点我的体验. 首先是创建项目时的选择界面的改变: 1.View Engine的变化. asp.net mvc 3中添加了Razor这个View engine. 如果你在创建的项目中同时有Index.aspx和Index.cshtml, 默认的MVC会选择aspx 的view来显示.但是你可以通过在Global.asax文件中的Application_Start方法中添加如下代码来让MVC先去执行Razor Engine的I