摘要:

关于ASP.NET MVC对请求的处理方式(同步或者异步)涉及到的五个组件,在《上篇》中我们谈了三个(MvcHandler、Controller和ActionInvoker),现在我们来谈余下的两个,即ControllerDescriptor和ActionDescriptor,这五个组件的执行并非孤立的,而是具有议定的关系。相信读者认真阅读了这两篇文章后,会对整个请求的处理方式有一个深刻的理解。[
阅读全文
posted @ 2012-06-22 08:50
Artech
阅读(9519)
推荐(18)
摘要:

Action方法的执行具有两种基本的形式,即同步执行和异步执行,而在ASP.NETMVC的整个体系中涉及到很多同步/异步的执行方式,虽然在前面相应的文章中已经对此作了相应的介绍,为了让读者对此有一个整体的了解,我们来做一个总结性的论述。[本文已经同步到《How ASP.NET MVC Works?》中]
阅读全文
posted @ 2012-06-21 09:34
Artech
阅读(12916)
推荐(16)
摘要:

Visual Studio提供的Controller创建向导默认为我们创建一个继承自抽象类Controller的Controller类型,这样的Controller只能定义同步Action方法。如果我们需要定义异步Action方法,必须继承抽象类AsyncController。这篇问你讲述两种不同的异步Action的定义方法和底层执行原理。
阅读全文
posted @ 2012-06-20 11:41
Artech
阅读(35160)
推荐(45)
摘要:

在简单了解了Unobtrusive JavaScript形式的验证在jQuery中的编程方式之后,我们来介绍ASP.NET MVC是如何利用它实现客户端验证的。服务端验证最终实现在相应的ModelValidator中,而最终的验证规则定义在相应的ValidationAttribute中;而客户端验证规则通过HtmlHelper相应的扩展方法(比如TextBoxFor、EditorFor和EdidtorForModel等)出现在生成的被验证HTML元素中。毫无疑问,服务端验证和客户端验证必须采用相同的验证规则,那么通过应用ValidationAttribute特性定义的验证规则也同样体现在基于客户端验证规则的HTML上。
阅读全文
posted @ 2012-06-18 06:30
Artech
阅读(15239)
推荐(13)
摘要:

之前我们一直讨论的Model验证仅限于服务端验证,即在Web服务器根据相应的规则对请求数据实施验证。如果我们能够在客户端(浏览器)对用户输入的数据先进行验证,这样会减少针对服务器请求的频率,从而缓解Web服务器访问的压力。在ASP.NET MVC 3.0中,jQuery验证框架被引入是我们可以采用Unobtrusive JavaScript的方式进行客户端验证。
阅读全文
posted @ 2012-06-17 10:28
Artech
阅读(20532)
推荐(19)
摘要:

对于Model验证,理想的设计应该是场景驱动的,而不是Model(类型)驱动的,也就是对于同一个Model对象,在不同的使用场景中可能具有不同的验证规则。举个简单的例子,对于一个表示应聘者的数据对象来说,针对应聘的岗位不同,肯定对应聘者的年龄、性别、专业技能等方面有不同的要求。但是ASP.NET MVC的Model验证确是Model驱动的,因为验证规则以验证特性的形式应用到Model类型及其属性上。这样的验证方式实际上限制了Model类型在基于不同验证规则的使用场景中的重用,本篇将提供一种解决方式实现多规则验证。
阅读全文
posted @ 2012-06-12 17:09
Artech
阅读(11256)
推荐(24)
摘要:

ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model类型及其属性上的ValidationAttribute才有效。如果我们能够将ValidationAttribute特性直接应用到参数上,我们不但可以实现简单类型(比如int、double等)数据的Model验证,还能够实现“一个Model类型,多种验证规则”,本篇文章将为你提供相关的解决方案。
阅读全文
posted @ 2012-06-11 17:22
Artech
阅读(9347)
推荐(12)
摘要:

DataAnnotationsModelValidator最终是通过它对应的ModelValidatorProvider,即DataAnnotationsModelValidatorProvider创建的。通过前面的介绍我们知道它是AssociatedValidatorProvider的子类,后者在用于获取ModelValidator的GetValidators方法中已经根据指定的Model元数据所有特性创建出来,DataAnnotationsModelValidator只需要从中筛选出继承自ValiationAttribute的验证特性并创建对象的DataAnnotationsModelValidator就可以了。
阅读全文
posted @ 2012-06-08 08:27
Artech
阅读(6218)
推荐(7)
摘要:

对于ASP.NET MVC基于标注特性的Model验证,很多人只知道应用在数据类型及其属性上用于定义验证规则和错误消息的ValidationAttribute。最终用于进行Model验证的是一个叫做ModelValidator的组件,而ValidationAttribute对应的ModelValidator为DataAnnotationsModelValidator,这篇简短的文章为你介绍ASP.NET MVC是如何针对Validation来创建DataAnnotationsModelValidator,以及后者如何利用前者实施Model验证的。
阅读全文
posted @ 2012-06-07 08:31
Artech
阅读(6620)
推荐(7)
摘要:

通过前面的介绍我们知道ModelValidatorProviders的静态只读Providers维护着一个全局的ModelValidatorProvider列表,最终用于Model验证的ModelValidator都是通过这些ModelValidatorProvider来提供的。对于该列表默认包含的三种ModelValidatorProvider来说,DataAnnotationsModelValidatorProvider无疑是最重要的,ASP.NET MVC默认提供的基于数据标注特性的声明式Model验证就是通过DataAnnotationsModelValidatorProvider提供的DataAnnotationsModelValidator来实现的。
阅读全文
posted @ 2012-06-06 09:08
Artech
阅读(20263)
推荐(11)
摘要:

在前面三篇文章(《ModelValidator》、《ModelValidatorProvider》和《ModelValidatorProviders》)中我们详细介绍了真正用于Model验证的ModelValidator以及相关的提供机制,接下来我们来讨论一下在这个以ModelValidator为核心的Model验证系统中,通过Model绑定得到的数据对象的验证是如何实现的
阅读全文
posted @ 2012-06-04 08:40
Artech
阅读(12309)
推荐(19)
摘要:

前面篇文章我们分别介绍用真正用于实施Model验证的ModelValidator,以及用于提供ModelValidator的ModelValidatorProvider,那么对于ASP.NET MVC的Model验证体系来说,最终是通过怎样的方式对ModelValidatorProvider进行注册,又是如何利用它们来创建相应的ModelValidator来实施Model验证的呢?这就是本篇文章论述的重点。
阅读全文
posted @ 2012-06-03 09:19
Artech
阅读(6173)
推荐(16)
摘要:

在《ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator》中我们介绍了ASP.NET MVC用于Model验证的四种ModelValidator,那么这些ModelValidator是如何被创建的呢?ASP.NET MVC的很多组件(比如ModelBinder和Filter)都采用了基于Provider的提供机制,这篇文章为你讲述这些ModelValidator对应的ModelValidatorProvider。
阅读全文
posted @ 2012-06-02 08:29
Artech
阅读(6652)
推荐(16)
摘要:

旨在为目标Action方法的执行绑定输入参数的Model绑定过程伴随着对Model的验证。借助相应的验证特性,我们可以直接以声明的方式在Model类型上定义验证规则,这些规则将会作为Model元数据的一部分。ASP.NET MVC的整个Model验证系统以组件ModelValidator为核心,或者说Model对象的验证最终通过某个ModelValidator对象来完成。
阅读全文
posted @ 2012-06-01 08:06
Artech
阅读(10194)
推荐(21)
摘要:

在本系列的前面两篇文章(《简单类型+复杂类型》、《数组》)我们通过创建的实例程序模拟了ASP.NET MVC默认使用的DefaultModelBinder对简单类型、复杂类型以及数组对象的Model绑定。现在我们按照相同的方式来分析基于集合和字典类型的Model绑定是如何实现的。[
阅读全文
posted @ 2012-05-31 08:35
Artech
阅读(10287)
推荐(17)
摘要:

基于数组和集合类型的Model绑定机制比较类似,对于绑定参数类型或者参数类型的某个属性为数组或者集合,如果ValueProvider根据对应的Key能够匹配多条数据,那么这些数据最终将会转换为绑定的数组/集合的元素。此外,针对数组/集合的Model绑定还支持基于索引的方式。
阅读全文
posted @ 2012-05-30 08:11
Artech
阅读(13758)
推荐(13)
摘要:

总的来说,针对目标Action方法参数的Model绑定完全由组件ModelBinder来实现,在默认情况下使用的ModelBinder类型为DefaultModelBinder,接下来我们将按照逐层深入的方式通过一个模拟程序来介绍实现在DefaultModelBinder的默认Model绑定机制。
阅读全文
posted @ 2012-05-23 08:20
Artech
阅读(15767)
推荐(18)
摘要:

Model的绑定体现在从当前请求提取相应的数据绑定到目标Action方法的参数。通过前面的介绍我们知道Action方法的参数通过ParameterDescriptor来描述,ParameterDescriptor的BindingInfo属性表示的ParameterBindingInfo对象具有一个名为ModelBinder的组件用于完成针对当前参数的Model绑定。ModelBinder可以看成是整个Model绑定系统的核心,我们来认识这个重要的组件以及相关的提供机制。
阅读全文
posted @ 2012-05-21 08:12
Artech
阅读(27450)
推荐(27)
摘要:

在ASP.NET Model绑定系统中,用于提供数据值的ValueProvider对象通过ValueProviderFactory来创建。在ASP.NET MVC应用编程接口中,ValueProviderFactory继承自ValueProviderFactory类。本篇文章只要介绍基于ValueProviderFactory的ValueProvider的提供机制,以及如何通过自定义ValueProviderFactory实现我们需要的数据值的绑定方式
阅读全文
posted @ 2012-05-19 07:20
Artech
阅读(7772)
推荐(9)
摘要:

NameValueCollectionValueProvider采用一个NameValueCollection作为数据源,DictionnaryValueProvider的数据源类型自然就是一个Dictionnary。NameValueCollection和Dictionnary都是一个键值对的集合,它们之间的不同之处在NameValueCollection运行元素具有相同的Key,Dictionnary却要求元素的Key具有唯一性
阅读全文
posted @ 2012-05-18 08:22
Artech
阅读(5711)
推荐(17)
摘要:

在进行Model绑定过程中,需要根据基于Action方法参数的绑定上下文从请求数据中提取相应的数据以提供相应的数据。具体来说,Model绑定的数据具有多个来源,可能来源于Post的表单或者JSON字符串,或者来源于当前的路由数据,也可能来源于请求地址的插叙字符串。ASP.NET MVC将这种基于不同数据来源的数据获取/提供机制实现在一个叫做ValueProvider的组件中
阅读全文
posted @ 2012-05-17 09:04
Artech
阅读(8031)
推荐(13)
摘要:

ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证。对于自定义验证,我们也只需要定义相应的Validation就可以了,不过服务端验证比较简单,而客户端验证就要稍微复杂一些,本文提供一个简单的实例说明在ASP.NET MVC中实现自定义验证的基本步骤。
阅读全文
posted @ 2012-05-15 18:37
Artech
阅读(20015)
推荐(22)
摘要:

看了dudu的《HttpClient + ASP.NET Web API, WCF之外的另一个选择》一文,想起多很久之前体验ASP.NET Web API而创建的一个Demo,放着也是放着,姑且拿出来与大家分享。这是一个只涉及到简单CRUD操作的Web应用,业务逻辑以Web API的形式定义并以服务的形式发布出来,前台通过jQuery处理用户交互并调用后台服务。[源代码从这里下载]
阅读全文
posted @ 2012-05-14 07:50
Artech
阅读(19496)
推荐(32)
摘要:

Model绑定是为作为目标Action的方法准备参数列表的过程,所以针对参数的描述才是Model绑定的核心。在ASP.NET MVC应用编程接口中,服务于Model绑定的参数元数据通过ParameterDescriptor类型来表示,而ActionDescriptor的GetParameters方法返回的就是一个ParameterDescriptor数组。
阅读全文
posted @ 2012-05-13 18:37
Artech
阅读(6916)
推荐(8)
摘要:

《WCF全面解析》在正式销售不到一周的时间内已经进入互动网7日销量已经进入计算机类书籍排名第2位,关注排名首位,谢谢各位的支持,现将三个试图章节共享出来与大家分享。
阅读全文
posted @ 2012-05-12 10:41
Artech
阅读(10539)
推荐(10)
摘要:

不论是用于描述Controller的ControllerDescriptor,还是用于描述Action方法的ActionDescriptor,都具有同步和异步两个版本,那么这些不同类型的ControllerDescriptor的ActionDescriptor是在什么情况下创建的呢?
阅读全文
posted @ 2012-05-11 08:52
Artech
阅读(6570)
推荐(13)
摘要:

在Model绑定过程中会通过激活的Controller类型创建用于描述它的ControllerDescriptor对象。Controller是一组Action方法的集合,而每一个Action通过ActionDescriptor对象来表示,在这篇文章中我们就来着重谈谈不同类型的ActionDescriptor。
阅读全文
posted @ 2012-05-10 18:59
Artech
阅读(13735)
推荐(19)
摘要:

ASP.NET MVC应用的请求都是针对某个Controller的某个Action方法,所以对请求的处理最终体现在对目标Action方法的执行。而Action方法具有相应的参数,所以在方法执行之前必须根据相应的规则从请求中提取相应的数据并将其转换为Action方法参数列表,我们将这个过程称为Model绑定。在ASP.NET MVC应用编程接口中,Action方法某个参数的元数据通过ParameterDescriptor表示,而两个相关的类型ControllerDescriptor和ActionDescriptor则用于描述Controller和Action方法。
阅读全文
posted @ 2012-05-10 07:28
Artech
阅读(8943)
推荐(15)
摘要:

在前面的介绍中我们已经提到过表示Model元数据的ModelMetadata对象最终是通过一个名为ModelMetadataProvider的组件提供的,接下来我们着重讨论基于ModelMetadataProvider的Model元数据提供机制及其扩展
阅读全文
posted @ 2012-05-09 07:52
Artech
阅读(8229)
推荐(18)
摘要:

“全书之写印,实系初稿。有时公私琐务猬集,每写一句,三搁其笔;有时兴会淋漓,走笔疾书,絮絮不休;有时意趣萧索,执笔木坐,草草而止。每写一段,自助覆阅,辄摇其首,觉有大不妥者,即贴补重书,故剪刀浆糊乃不离左右。个中甘苦,只自知之。” 在某个阳光明媚的早晨,我在去上班的公交车上翻看岳南先生的《南渡北归》的时候,看到上面这段董作宾描述自己写作《殷历谱》之甘苦的文字,回想起我写作这本书的经历,不禁感慨万千。我无意将《WCF全面解析》自比煌煌巨著《殷历谱》,只是觉得人同此心,这段文字正好描述我写作此书的状态。
阅读全文
posted @ 2012-05-08 08:05
Artech
阅读(46724)
推荐(98)
摘要:

对于一个需要支持多语言的Web应用,一个很常见的使用方式就是通过请求地址来控制界面呈现所基于的语言文化,比如我们在表示请求地址的URL中将上语言文化代码(比如en或者en-US)来指导服务器应该采用怎样的语言来显示界面的内容。对于一个ASP.NET MVC应用来说,我们很容易通过URL路由来实现这样一个功能。
阅读全文
posted @ 2012-05-04 11:00
Artech
阅读(10850)
推荐(12)
摘要:

我们不仅可以创建相应的模板来根据Model元数据控制种类型的数据在UI界面上的呈现方法,还可以通过一些扩展来控制Model元数据本身。在某些情况下通过这两者的结合往往可以解决很多特殊数据的呈现问题,我们接下来演示的实例就是典型的例子。
阅读全文
posted @ 2012-05-04 07:44
Artech
阅读(9220)
推荐(27)
摘要:

当我们调用HtmlHelper或者HtmlHelper的模板方法对整个Model或者Model的某个数据成员以某种模式(显示模式或者编辑模式)进行呈现的时候,通过预先创建的代表Model元数据的ModelMetadata对象都可以找到相应的模板。如果模板对应着某个自定义的分部View,那么只需要执行该View即可;对于默认模板,则直接可以得到相应的HTML。本篇文章着重讨论模板的获取和执行机制。
阅读全文
posted @ 2012-05-03 14:49
Artech
阅读(5885)
推荐(7)
摘要:

相信大家对TransactionScope都比较熟悉。通过TransactionScope,我们可以很容易地将一组操作纳入同一个事务中。我个人觉得这体现了一种可以重用的模式,即本篇文章介绍的Context+ContextScope模式,这种模式旨在一定范围内创建一个可以共享的上下文信息。
阅读全文
posted @ 2012-05-02 11:24
Artech
阅读(4755)
推荐(12)
摘要:

通过ModelMetadata表示的Model元数据的一个主要的作用在于为定义在HtmlHelper和HtmlHelper中的模板方法(这些模板方法包括Display/DisplayFor、Editor/EditorFor、DisplayForModel/EditForModel、Lable/LabelFor和DisplayText/DisplayTextFor等)提供用于最终生成HTML的元数据信息。在调用这些方法的时候,如果我们指定了一个具体的通过分部View定义的模板,或者对应的ModelMetadata的TemplateHint属性具有一个模板名称,会自动采用该模板来生成最终的HTML。如果没有指定模板名称,则会根据数据类型在预定义的目录下去寻找做模板的分部View。如果找不到,则会利用默认的模板进行HTML的呈现
阅读全文
posted @ 2012-05-02 06:46
Artech
阅读(16433)
推荐(34)
摘要:

Criminals have long employed the tactic of masking their true identity, from disguises to aliases to caller-id blocking. It should come as no surprise then, that criminals who conduct their nefarious activities on networks and computers should employ such techniques. IP spoofing is one of the most common forms of on-line camouflage. In IP spoofing, an attacker gains unauthorized access to a computer o
阅读全文
posted @ 2012-04-26 11:02
Artech
阅读(2346)
推荐(1)
摘要:

在介绍用于自定义Model元数据属性的AdditionalMetadataAttribute特性时我们提到了它实现的接口IMedataAware,我们说这是一个非常重要并且有用的接口,通过自定义实现该接口的特性我们可以对最终生成的Model元数据进行自由地定制。
阅读全文
posted @ 2012-04-13 06:40
Artech
阅读(8087)
推荐(17)
摘要:

在《上篇》我们已经提到过了,Model元数据的定制是通过在作为Model的数据类型极其属性成员上应用相应的特性来实现,这些用于声明式元数据定义的特性大都定义在System.ComponentModel.DataAnnotations.dll程序集中,程序集的名称同时也是对应的命名空间名称,所以我们可以它们为数据注解特性(Data Annotation Attribute),接下来我们来介绍一些常用的数据注解特性,以及它们对于元数据具有怎样的影响。
阅读全文
posted @ 2012-04-12 07:47
Artech
阅读(13128)
推荐(24)
摘要:

Contronoller激活之后,ASP.NET MVC会根据当前请求上下文得到目标Action的名称,然后解析出对应的方法并执行之。在整个Action方法的执行过程中,Model元数据的解析是一个非常重要的环节。ASP.NET MVC中的Model实际上View Model,表示最终绑定到View上的数据,而Model元数据描述了Model的数据结构,以及Model的每个数据成员的一些特性。正是有了Model元数据的存在,才使模板化HTML的呈现机制成为可能。此外,Model元数据支撑了ASP.NET MVC的Model验证体系,因为针对Model的验证规则正是定义在Model元数据中。
阅读全文
posted @ 2012-04-11 07:32
Artech
阅读(18390)
推荐(47)
摘要:

在未来的一段时间里,我将撰写一系列关于ASP.NET MVC的文章。这些文章旨在剖析ASP.NET MVC框架底层的运行机制,力求将整个框架这个黑盒转换为百盒,将框架本身进行请求处理的流程完整而清晰地呈现在读者面前,让读者知其然并知其所以然。了解ASP.NET MVC框架本身的原理,不仅仅可以帮助我们更好地进行相关的编程,还能让我们根据项目具体的需求对其进行得心应手地扩展——因为ASP.NET MVC本身是一个极具扩展性的框架。
阅读全文
posted @ 2012-04-10 08:11
Artech
阅读(105469)
推荐(245)