随笔分类 -  [01] 技术剖析

上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 22 下一页
摘要:在前面的介绍中我们已经提到过表示Model元数据的ModelMetadata对象最终是通过一个名为ModelMetadataProvider的组件提供的,接下来我们着重讨论基于ModelMetadataProvider的Model元数据提供机制及其扩展 阅读全文
posted @ 2012-05-09 07:52 Artech 阅读(8148) 评论(10) 推荐(18) 编辑
摘要:我们不仅可以创建相应的模板来根据Model元数据控制种类型的数据在UI界面上的呈现方法,还可以通过一些扩展来控制Model元数据本身。在某些情况下通过这两者的结合往往可以解决很多特殊数据的呈现问题,我们接下来演示的实例就是典型的例子。 阅读全文
posted @ 2012-05-04 07:44 Artech 阅读(9124) 评论(31) 推荐(27) 编辑
摘要:通过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 阅读(16335) 评论(44) 推荐(34) 编辑
摘要:在介绍用于自定义Model元数据属性的AdditionalMetadataAttribute特性时我们提到了它实现的接口IMedataAware,我们说这是一个非常重要并且有用的接口,通过自定义实现该接口的特性我们可以对最终生成的Model元数据进行自由地定制。 阅读全文
posted @ 2012-04-13 06:40 Artech 阅读(8026) 评论(14) 推荐(17) 编辑
摘要:在《上篇》我们已经提到过了,Model元数据的定制是通过在作为Model的数据类型极其属性成员上应用相应的特性来实现,这些用于声明式元数据定义的特性大都定义在System.ComponentModel.DataAnnotations.dll程序集中,程序集的名称同时也是对应的命名空间名称,所以我们可以它们为数据注解特性(Data Annotation Attribute),接下来我们来介绍一些常用的数据注解特性,以及它们对于元数据具有怎样的影响。 阅读全文
posted @ 2012-04-12 07:47 Artech 阅读(13074) 评论(19) 推荐(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 阅读(18294) 评论(27) 推荐(47) 编辑
摘要:在未来的一段时间里,我将撰写一系列关于ASP.NET MVC的文章。这些文章旨在剖析ASP.NET MVC框架底层的运行机制,力求将整个框架这个黑盒转换为百盒,将框架本身进行请求处理的流程完整而清晰地呈现在读者面前,让读者知其然并知其所以然。了解ASP.NET MVC框架本身的原理,不仅仅可以帮助我们更好地进行相关的编程,还能让我们根据项目具体的需求对其进行得心应手地扩展——因为ASP.NET MVC本身是一个极具扩展性的框架。 阅读全文
posted @ 2012-04-10 08:11 Artech 阅读(105126) 评论(195) 推荐(245) 编辑
摘要:除了通过自定义ControllerFactory的方式引入IoC之外,在使用默认DefaultControllerFactory情况下也可以通过一些扩展使基于IoC的Controller激活成为可能。主要的方式就是自定义ControllerActivator和 DependencyResolver。 阅读全文
posted @ 2012-04-01 12:33 Artech 阅读(11528) 评论(18) 推荐(17) 编辑
摘要:IoC简单地说就是应用本身不负责依赖对象的创建和维护,而交给一个外部容器来负责。这样控制权就由应用转移到了外部IoC容器,控制权就实现了所谓的反转。比如在类型A中需要使用类型B的实例,而B实例的创建并不由A来负责,而是通过外部容器来创建。通过IoC的方式是实现针对目标Controller的激活具有重要的意义。 阅读全文
posted @ 2012-04-01 08:33 Artech 阅读(16732) 评论(32) 推荐(50) 编辑
摘要:Controller激活系统最终通过注册的ControllerFactory创建相应的Conroller对象,如果没有对ControllerFactory类型或者类型进行显式注册(通过调用当前ControllerBuilder的SetControllerFactory方法),默认使用的是一个DefaultControllerFactory对象,我们现在就来讨论实现在DefaultControllerFactory类型中的默认Controller激活机制。 阅读全文
posted @ 2012-03-31 12:54 Artech 阅读(8277) 评论(9) 推荐(23) 编辑
摘要:我们将整个ASP.NET MVC框架划分为若干个子系统,那么针对请求上下文激活目标Controller对象的子系统被我们成为Controller激活系统。本系列将对Controller的激活系统进行深入地剖析,让你明白Controller到底是如何创建的。 阅读全文
posted @ 2012-03-31 09:10 Artech 阅读(14471) 评论(23) 推荐(45) 编辑
摘要:我们知道一个请求最终通过一个具体的HttpHandler进行处理,而我们熟悉的用于表示一个Web页面的Page对象就是一个HttpHandler,被用于处理基于某个.aspx文件的请求。我们可以通过HttpHandler的动态映射来实现请求地址与物理文件路径之间的分离。实际上ASP.NET路由系统就是采用了这样的实现原理。 阅读全文
posted @ 2012-03-28 08:15 Artech 阅读(12712) 评论(14) 推荐(32) 编辑
摘要:ASP.NET 路由系统通过注册的路由表旨在实现两个“方向”的路有功能,即针对入栈请求的路由和出栈URL的生成。前者通过调用代表全局路由表的RouteCollection对象的GetRouteData方法实现,后者则依赖于RouteCollection的GetVirtualPathData方法,而最终还是落在继承自RouteBase的路由对象的同名方法的调用上。为了编程的方面,ASP.NET MVC为了设计了HtmlHelper和UrlHelper这两个帮助类,我们可以通过调用它们的ActionLink/RouteLink和Action/RouteUrl根据注册的路有规则生成链接或者URL。从本质上讲,HtmlHelper/UrlHelper实现的对URL的生成最终还是依赖于上面所说的GetVirtualPathData方法。 阅读全文
posted @ 2012-03-27 08:09 Artech 阅读(20328) 评论(9) 推荐(32) 编辑
摘要:上周我写了三篇文章(一、二、三)详细地介绍了ASP.NET的路由系统。ASP.NET的路由系统旨在通过注册URL模板与物理文件之间的映射进而实现请求地址与文件路径之间的分离,但是对于ASP.NET MVC应用来说,请求的目标不再是一个具体的物理文件,而是定义在某个Controller类型中的Action方法。出于自身路由特点的需要,ASP.NET对ASP.NET的路由系统进行了相应的扩展。 阅读全文
posted @ 2012-03-26 08:14 Artech 阅读(39406) 评论(43) 推荐(58) 编辑
摘要:前面我们已经提到过,ASP.NET 的路由系统主要具有两个方面的应用,其一就是通过注册URL模板与物理文件路径的匹配实现请求地址和物理地址的分离;另一个则是通过注册的路由规测生成一个相应的URL。后者通过调用RouteCollection类型的GetVirtualPath方法来实现。[源代码从这里下载] 阅读全文
posted @ 2012-03-21 08:10 Artech 阅读(14934) 评论(28) 推荐(27) 编辑
摘要:我们可以通过RouteTable的静态属性Routes得到一个基于应用的全局路由表,这是一个类型的RouteCollection的集合对象,我们可以通过调用它的MapPageRoute进行路由映射。接下来我们通过实现演示的方式来说明路由注册的一些细节问题。 阅读全文
posted @ 2012-03-20 08:29 Artech 阅读(34737) 评论(39) 推荐(66) 编辑
摘要:表现为请求地址与目标Controller和Action的动态映射的URL路由系统并不是专属于ASP.NET MVC,而是直接建立在ASP.NET 中。ASP.NET通过URL路由系统实现了请求地址与物理文件的分离。[源代码地址从这里下载] 阅读全文
posted @ 2012-03-19 07:43 Artech 阅读(23407) 评论(36) 推荐(72) 编辑
摘要:作为Controller基类ControllerBase的Execute方法的核心在于对Action方法的执行和作为方法返回的ActionResult的执行,两者的执行是通过一个叫做ActionInvoker的组件来完成的。由于Action方法具有相应的参数,在执行Action方法之前必须进行参数的绑定。ASP.NET MVC将这个机制成为Model的绑定,而这又涉及到另一个重要的组件ModelBinder 阅读全文
posted @ 2012-03-12 17:30 Artech 阅读(16403) 评论(27) 推荐(40) 编辑
摘要:ASP.NET MVC的URL路由系统通过注册的路由表对HTTP请求进行解析从而得到一个用于封装路由数据的RouteData对象,而这个过程是通过自定义的UrlRoutingModule对HttpApplication的PostResolveRequestCache事件进行注册实现的。RouteData中已经包含了目标Controller的名称,现在我们来进一步分析真正的Controller对象是如何被激活的。 阅读全文
posted @ 2012-03-12 09:19 Artech 阅读(16186) 评论(16) 推荐(51) 编辑
摘要:在一个ASP.NET MVC应用来说,针对HTTP请求的处理和相应定义Controller类型的某个Action方法中,每个HTTP请求的目标对象不再像ASP .NET Web Form应用一样是一个物理文件,而是某个Controller的某个Action。目标Controller和Action的名称包含在HTTP请求中,而ASP.NET MVC的首要任务就是通过当前HTTP请求的解析得到正确的Controller和Action的名称。这个过程是通过ASP.NET MVC的URL路由机制来实现的。 阅读全文
posted @ 2012-03-11 20:25 Artech 阅读(20449) 评论(21) 推荐(65) 编辑

上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 22 下一页