这就是本篇文章论述的重点。[本文已经同步到《How ASP.NET MVC Works?》...三、CompositeModelValidator 虽然CompositeModelValidator仅仅是定义在程序集System.Web.Mvc.dll中的一个私有类型,但是它在ASP.NET MVC...定义在Validate方法中的验证逻辑是这样的:CompositeModelValidator通过在构造函数中初始化的表示验证对象类型的Model元数据的ModelMetadata对象的Properties...然后遍历该列表的每个ModelMetadata对象,调用其GetValidators方法得到一组用于验证属性值得ModelValidator列表,然后使用该ModelValidator列表依次对相应的属性值进行验证...在Action方法Index中,我们使用当前的ModelMetadataProvider创建了基于Contact类型的ModelMetadata,然后调用ModelValidator的静态方法GetValidator
在《ASP.NET MVC下的四种验证编程方式》一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”、“标注ValidationAttribute特性”、“让数据类型实现IValidatableObject...一、ModelValidator与ModelValidatorProvider 虽然Model绑定的方式因被验证数据类型的差异而有所不同,但是ASP.NET MVC总是使用一个名为ModelValidator...我们知道ASP.NET MVC大都采用Provider的模式来提供相应的组件,比如描述Model元数据的ModelMetadata通过对应的ModelMetadataProvider来提供,实现Model...ASP.NET MVC 通过静态类型ModelValidatorProviders对使用的ModelValidatorProvider进行注册。...IValidatable接口,ASP.NET MVC会自动调用实现的Validate方法对其实施验证,此时创建的ModelValidator是一个ValidatableObjectAdapter对象。
Contronoller激活之后,ASP.NET MVC会根据当前请求上下文得到目标Action的名称,然后解析出对应的方法并执行之。...ASP.NET MVC中的Model实际上View Model,表示最终绑定到View上的数据,而Model元数据描述了Model的数据结构,以及Model的每个数据成员的一些特性。...正是有了Model元数据的存在,才使模板化HTML的呈现机制成为可能。此外,Model元数据支撑了ASP.NET MVC的Model验证体系,因为针对Model的验证规则正是定义在Model元数据中。...ASP.NET MVC的Model元数据通过类型ModelMetadata表示。...ASP.NET MVC Model元数据及其定制: 初识Model元数据 ASP.NET MVC Model元数据及其定制: Model元数据的定制 ASP.NET MVC Model元数据及其定制
对于ASP.NET MVC基于标注特性的Model验证,很多人只知道应用在数据类型及其属性上用于定义验证规则和错误消息的ValidationAttribute。...对象进而被应用到Model验证系统中。...在该方法中,基于被验证对象(如果为Null则采用Model元数据的Model属性)创建出表示当前验证上下文的ValidationContext对象,并采用Model元数据的DisplayName属性作为该上下文的显示名称...MVC基于标注特性的Model验证:ValidationAttribute ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator ASP.NET...应用到参数上 ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
[本文已经同步到《How ASP.NET MVC Works?》...而对于可验证对象来说,默认情况下提供的ModelValidator列表中还包含一个ValidatableObjectAdapter对象。...ASP.NET MVC基于标注特性的Model验证:ValidationAttribute ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator...ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidatorProvider ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute...应用到参数上 ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
[本文已经同步到《How ASP.NET MVC Works?》...中] 一、 ModelMetadataProvider 在ASP.NET MVC的Model元数据相关的应用编程接口中,用于创建Model元数据的ModelMetadataProvider接继承自抽象类...在ASP.NET MVC的元数据解析系统中使用的ModelMetadataProvider最终通过类型ModelMetadataProviders获取。...值得一提的是,当通过调用CreateMetadata创建出ModelMetadata之后,会从特性列表中筛选出实现了IMetadataAware接口的特性,并将该ModelMetadata对象作为参数调用它们的...在重写的CreateMetadata方法中,我们先调用基类的同名方法得到一个ModelMetadata对象。
如下面的代码片断所示,AllowHtmlAttribute是实现了IMetadataAware 接口,在OnMetadataCreated方法中它直接将作为参数的ModelMetadata对象的RequestValidationEnabled...在通过Visual Studio提供的ASP.NET MVC项目模板创建的空Web应用中,我们定义了如下一个数据类型Foo,其中属性Baz上应用了AllowHtmlAttribute特性。...在使用该特性的时候,我们需要显式制定表示显示名称的Name属性,如果需要进行本地化处理,需要将显示内容定义在某个资源文件中,并通过ResourceType属性指定该资源文件生成的类型。...接下来我们来演示如何使用这个DisplayTextAttribute特性来替换DisplayAttribute特性进行显示名称的设置,为此我们在通过Visual Studio的ASP.NET MVC 项目模板创建的空...ASP.NET MVC Model元数据及其定制: 初识Model元数据 ASP.NET MVC Model元数据及其定制: Model元数据的定制 ASP.NET MVC Model元数据及其定制
其使用System.Web.Mvc.ModelMetadata来表示Model元数据,并且ModelMetadata是一种迭代,支持自包含的结构,有点像组合模式。...即使不使用Razor视图引擎,直接使用静态的HTML5页面,该模块仍然不可或缺。现在简单的介绍一下ASP.NET MVC中相关的Model绑定。 ...在ASP.NET MVC框架中,Model绑定本质上就是为目标Action方法生成参数列表的过程,这些参数列表的来源可能是请求的URL,可能是HTTP的请求头或请求体中,通过参数的元数据信息可以得到相关内容...今天学习的ASP.NET MVC中的Model的验证,刚开时会以为这一章会比较简单,因为之前已经学习过了Model元数据的解析、Model绑定,Model的验证可能就只是DataAnnotation相关类的介绍...ASP.NET MVC4框架揭秘[M]. 上海:电子工业出版社, 2012.
在《ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator》中我们介绍了ASP.NET MVC用于Model验证的四种ModelValidator...[本文已经同步到《How ASP.NET MVC Works?》...对象置于返回的ModelValidtor集合中。...在通过Visual Studio的ASP.NET MVC项目模板创建的空Web应用中我们定义了如下一个实现了IDataErrorInfo接口的Contact类型。...然后使用这个列表中的每个具体的ModelValidator对一个Contact对象实施验证,并将ModelValidator的类型和作为验证结果的ModelValidationResult对象的ErrorMessage
[本文已经同步到《How ASP.NET MVC Works?》...,当我们以编辑模式将Model对象在View中呈现的时候,往往不允许用于对作为唯一标识的属性进行修改。...特性是我们经常使用的数据标注特性。...bool IsRequired { get; set; } 5: } ASP.NET MVC Model元数据及其定制: 初识Model元数据 ASP.NET...MVC Model元数据及其定制: Model元数据的定制 ASP.NET MVC Model元数据及其定制:一个重要的接口IMetadataAware
在某些情况下通过这两者的结合往往可以解决很多特殊数据的呈现问题,我们接下来演示的实例就是典型的例子。[本文已经同步到《How ASP.NET MVC Works?》...在通过Visual Studio的ASP.NET MVC项目模板创建的空Web应用中,我们定义一个作为Model表示员工的Employee类型。...在该方法中,我们创建了一个具体的Employee对象并对它的所有属性进行了相应设置,最终将该对象呈现在默认的View中。...对象的AdditionalValues属性中。...:预定义模板 ASP.NET MVC的Model元数据与Model模板:模板的获取与执行策略 ASP.NET MVC的Model元数据与Model模板:将ListControl引入ASP.NET MVC
元数据的ModelMetadata对象都可以找到相应的模板。...本篇文章着重讨论模板的获取和执行机制,不过在这之前,顺便来讨论一下DataTypeAttribute和模板的关系。[本文已经同步到《How ASP.NET MVC Works?》...Model元数据的ModelMetadata对象都可以找到相应的模板。...ASP.NET MVC的Model元数据与Model模板:预定义模板 ASP.NET MVC的Model元数据与Model模板:模板的获取与执行策略 ASP.NET MVC的Model元数据与Model...模板:将ListControl引入ASP.NET MVC
ASP.NET MVC的整个Model验证系统以组件ModelValidator为核心,或者说Model对象的验证最终通过某个ModelValidator对象来完成,所以我们有必要先来认识一下ModelValidator...[本文已经同步到《How ASP.NET MVC Works?》...等)的方式来定义相应的验证规则,这是ASP.NET MVC 提供的默认Model验证方式。...三、ClientModelValidator ClientModelValidator是定义在程序集System.Web.Mvc.dll中的内部类型,在客户端用于数据类型的验证。...MVC的Model验证系统为实现了IDataErrorInfo接口的数据对象的验证定义专门的ModelValidator。
很多同学都读过这篇文章吧 ASP.NET MVC中你必须知道的13个扩展点,今天给大家介绍一个ASP.NET MVC的扩展库,主要就是针对这些扩展点进行。...如果你和我一样喜欢使用IOC,这个库值得你关注,这些IOC我都用过了,现在比较喜欢使用Autofac。...ASP.NET MVC扩展库的网站地址是http://www.mvcextension.com/,基于Ms-PL协议的开源库,5.11发布了1.0版本,下面介绍一下他的特性: 这个库的核心是IOC,却可以让你的代码和...IOC无关,你的代码却可以使用强大的IOC。...ModelMetadata Fluent Configuration:支持复合ModelMetadata provider, 默认使用DataAnnotationsModelMetadataProvider
[本文已经同步到《How ASP.NET MVC Works?》...UI界面上的HTML呈现方式,实际上在ASP.NET MVC的内部还定义了一系列的预定义模板。...呈现方式(实际上在ASP.NET MVC内部,两种模版最终生成的HTML是通过相同的方法产生的)。...MVC的Model元数据与Model模板:预定义模板 ASP.NET MVC的Model元数据与Model模板:模板的获取与执行策略 ASP.NET MVC的Model元数据与Model模板:将ListControl...引入ASP.NET MVC
在本系列的前面两篇文章(《简单类型+复杂类型》、《数组》)我们通过创建的实例程序模拟了ASP.NET MVC默认使用的DefaultModelBinder对简单类型、复杂类型以及数组对象的Model绑定...现在我们按照相同的方式来分析基于集合和字典类型的Model绑定是如何实现的。[源代码从这里下载][本文已经同步到《How ASP.NET MVC Works?》...针对集合的Model绑定实现在方法BindCollectionModel中,我们按照数组绑定的方式得的针对目标集合对象的所有元素对象,并将其添加到一个List对象中,然后调用ReplaceHelper...的静态方法ReplaceCollection将该列表中的元素拷贝到预先创建的Model对象中。...MVC的Model绑定的机制:简单类型+复杂类型 通过实例模拟ASP.NET MVC的Model绑定的机制:数组 通过实例模拟ASP.NET MVC的Model绑定的机制:集合+字典
RouteDataDictionary对象的DataTokens集合中。...,生成出来的ModelValidator也是不会被使用的。...为了验证它们是否能够最终实现我们期望的验证效果,我们将它们应用到一个简单的ASP.NET MVC应用中。...六、实例演示 在通过Visual Studio的ASP.NET MVC项目模板创建的空的Web应用中,我们创建了一个具有如下定义的HomeController。...ASP.NET MVC基于标注特性的Model验证:ValidationAttribute ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator
之间的组合关系) ModelMetadata是ASP.NETMVC中用来表示Model的元数据对象,它包含了一个Model的所有的相关元数据信息,当然这取决Model的使用方向,不同的使用方向会有不同类型的元数据...)要么编辑(Editor),上图中已经给出MVC默认生成的HTML格式;这是作为默认的方式输出,我们并没有参与到输出过程的任何环节中,要想控制ViewModel的某个属性的展现方式我们必须对ModelMetadata...特性是孤身一人在System.Web.Mvc命名空间中,这可能对你造成了一些理解上的困扰;明明是ASP.NETMVC框架使用的对象为什么会跑到System.ComponentModel.DataAnnotations...编程直接相关的(如:HiddenInput元数据库控制特性,用来隐藏HTML中的Input Dom元素),但是大部分都是位于组件对象模型命名空间中;这就会给我们带来一些疑问,为什么跟ASP.NETMVC...;在ASP.NETMVC中,我们使用这些数据注解特性来声明元数据控制选项,在其他的应用框架中如:WPF中,可能需要用来指定UI上的双向绑定事件,这些都是需要建立在这些数据注解特性上的; 6.4.使用System.ComponentModel.DataAnnotations
在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩、应用程序版本自动刷新和工程构建等内容。...下面介绍如何在 ASP.NET MVC 中集成 AngularJS 的第二部分。...,但在此示例应用程序,我想使用在客户端一侧动态加载的客户和产品,所以我不能用渲染功能来渲染我的一些包,这是挑战的开始。...这个问题是以如何使用 AngularJS 从客户端 JavaScript 渲染服务器端的 ASP.NET 包开始的?...在这第二部分讲解中,作者解决了如何在 ASP.NET MVC 中集成 AngularJS 遇到的大部分问题。
,所以一个应用会涉及到针对多个IValueProvider对象的使用。...不论模型绑定支持多少种数据源,如果我们总是能够使用一个单一IValueProvider对象来提供模型绑定的数据项,这无疑会使模型绑定的设计变得更加简单。...如下所示的是模拟框架对该接口的简化定义,如代码片段所示,IModelBinderProvider接口定义了唯一的GetBinder方法根据提供的用于描述待绑定模型元数据的ModelMetadata对象来提供对应的...正如前面提到过的,在实现的BindAsync方法中,ComplexTypeModelBinder对象会从模型元数据中得到待绑定的目标类型,并通过反射的方式创建一个空的对象。...,我们在前面演示的应用程序中定义了如下这个HomeController类型。
领取专属 10元无门槛券
手把手带您无忧上云