上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 23 下一页
摘要: 我在发表了《Delegate如何进行类型转换?》之后又想到了其他一些相关的东西,除了简单地分析如何通过Emit实现EventHandler的类型转换之外,还加上关于Delegate“协变”与“逆变”的一些东西,算是对前一篇文章的完善。 阅读全文
posted @ 2012-11-04 19:31 Artech 阅读(6112) 评论(7) 推荐(5)
摘要: 我们知道对于两个不具有继承关系的两个类型,如果没有为它们定义转换器,两这之间的类型转换是不允许的,Delegate也是如此。但是有时候我们却希望“兼容”的两种Delegate类型能够进行转换。如果事件的类型不是EventHandler的子类,我们是不可以将一个EventHandler对象对事件进行注册的。如果我们能够将EventHandler对象转换成事件对应的类型,那么就可以到达这样的目的:将同一个EventHandler注册给任意的事件 阅读全文
posted @ 2012-11-02 20:05 Artech 阅读(6215) 评论(16) 推荐(7)
摘要: 对于企业应用的开发者来说,异常处理是一件既简单又复杂的事情。说其简单,是因为相关的编程无外乎try/catch/finally+throw而已;说其复杂,是因为我们往往很难按照我们真正需要的策略来处理异常。我一直有这样的想法,理想的企业应用开发中应该尽量让框架来完成对异常的处理,最终的开发人员在大部分的情况下无需编写异常处理相关的任何代码。在这篇文章中我们将提供一个解决方案来让ASP.NET应用利用EntLib的异常处理模块来实现自动化的异常处理。 阅读全文
posted @ 2012-10-28 17:55 Artech 阅读(22437) 评论(170) 推荐(45)
摘要: ASP.NET默认采用UrlAuthorizationModule和FileAuthorizationModule分别实现针对请求地址和物理文件的授权,但是在很多情况下我们需要额外的授权方式。Entlib提供了一种基于表达式的授权方式,它允许我们以一个表达式的方式来定义授权的规则。在新的项目中我们希望利用EntLib的授权框架来实现针对ASP.NET页面的自动授权,本文描述的解决方案是我刚刚想到的,希望广大网友朋友们帮助评估一下。 阅读全文
posted @ 2012-10-23 21:09 Artech 阅读(5895) 评论(12) 推荐(6)
摘要: Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。本文提供了一个解决方案利用ASP.NET SiteMap生成与Bootstrap“兼容”的菜单。具体的原理很简单,就是利用SiteMap读取预先定义的网站结构,按照Bootstrap的标准生成相应的HTML。 阅读全文
posted @ 2012-10-16 17:26 Artech 阅读(8924) 评论(23) 推荐(29)
摘要: 昨天有人在微博上问我如下一个问题:"老蒋,客户端调用wcf的一个接口函数时,有没有什么办法可以先弹出一个确认框,确认后再执行调用。因为这个接口函数再很多地方都执行了调用,所以我想在某个入口进行统一地弹出一个确认框..."。其实这个问题可以通过WCF的扩展来完成,具体来说这个扩展涉及到一个我们不太常用的组件“InteractiveChannelInitializer”,在我的《WCF全面解析》中对它有过概括性的介绍。 阅读全文
posted @ 2012-10-07 10:01 Artech 阅读(9255) 评论(20) 推荐(25)
摘要: 基于Web Form引擎的WebFormViewEngine和针对Razor引擎的RazorViewEngine都是抽象类型BuildManagerViewEngine的子类,而后者又继承自VirtualPathProviderViewEngine。在这里我们仅仅对实现在RazorViewEngine中View获取的逻辑进行简单介绍。由于Razor引擎下的View通过RazorView对象来表示,而RazorView通过View文件的虚拟路径来构建,所以RazorViewEngine的View获取机制在于根据当前上下文找到与指定View名称相匹配的View文件(.cshtml或者.vbhtml文件),然后根据该 View文件的虚拟路径创建一个RazorView对象并最终封装成ViewEngineResult对象返回。 阅读全文
posted @ 2012-09-07 08:55 Artech 阅读(18630) 评论(30) 推荐(18)
摘要: 在《RazorView》介绍BuildManagerCompiledView的时候,我们谈到默认使用的ViewPageActivator使用当前注册的DependencyResolver来完成对目标View的激活,这意味着我们可以通过注册自定义DependencyResolver的方式实现基于IoC的View激活。本篇文章中我们将演示如何通过自定义View的方式实现与IoC框架Ninject的集成。 阅读全文
posted @ 2012-09-06 08:27 Artech 阅读(7041) 评论(12) 推荐(12)
摘要: Razor引擎具有两个核心的类型,一个是表示View本身的类型RazorView,另一个则是获取和创建它的WebFormViewEngine,我们将用两篇文章对它们分别进行剖析。Razor引擎下的View通过类型RazorView表示,它与表示Web Form引擎View的类型WebFormView都是BuildManagerCompiledView的子类。 阅读全文
posted @ 2012-09-05 08:16 Artech 阅读(13784) 评论(24) 推荐(25)
摘要: 通过.cshtml或者.vb.html文件定义的View能够被执行,必须先被编译成存在于某个程序集的类型,ASP.NET MVC采用动态编译的方式对View文件实施编译。当我们在对ASP.NET MVC进行部署的时候,需要对.cshtml或者.vb.html文件进行打包。针对某个View的第一次访问会触发针对它的编译,一个View对应着一个类型。我们可以对.cshtml或者.vb.html进行修改,View文件修改后的第一次访问将会导致View的再一次编译。和ASP.NET 传统的编译方式一样,针对View的编译默认是基于目录的,也就是说同一个目录下的多个View文件被编译到同一个程序集中 阅读全文
posted @ 2012-09-04 08:30 Artech 阅读(27195) 评论(35) 推荐(46)
摘要: 为了让读者对View引擎及其View呈现机制具有一个深刻的认识,我们自定义一个简单的用于呈现静态HTML的StaticFileViewEngine。在一个通过Visual Studio的ASP.NET MVC项目模板创建的空Web应用中,我们定义了如下一个针对于静态HTML内容呈现的自定义StaticFileView。StaticFileView实现了IView接口,在实现的Render方法中读取制定文件的内容写入作为参数的TextWriter。 阅读全文
posted @ 2012-08-23 07:58 Artech 阅读(11880) 评论(17) 推荐(13)
摘要: 在前面的四篇文章中,我们介绍了各种ActionResult以及相关的请求响应机制,但是与“View的呈现”相关的ActionResult是ViewResult。通过ViewResult的执行实现的对View的呈现比上面我们介绍的各种ActionResult要复杂得多,ASP.NET MVC内部设计了一个扩展的View引擎实现了最终的View呈现工作。 阅读全文
posted @ 2012-08-22 09:09 Artech 阅读(18588) 评论(36) 推荐(25)
摘要: 在本系列的最后一篇,我们来讨论最后三个ActionResult:HttpStatusCodeResult、RedirectResult和RedirectToRouteResult 。第一个用于实现针对某个HTTP状态的响应,而后两个用于实现重定向。至于重定向,又分为“暂时重定向”和“永久重定向”,按照响应状态,又称“302重定向”和“301重定向”。 阅读全文
posted @ 2012-08-16 08:33 Artech 阅读(23503) 评论(21) 推荐(23)
摘要: 在之前的两篇文章(《EmptyResult & ContentResult》和《FileResult》)我们剖析了EmptyResult、ContentResult和FileResult这三种ActionResult是如何将Action执行的结果响应给客户端的。本篇文章着重介绍在进行Ajax调用中经常使用的两个ActionResult,即JavaScriptResult和JsonResult 阅读全文
posted @ 2012-08-15 08:29 Artech 阅读(39101) 评论(26) 推荐(39)
摘要: FileResult是一个基于文件的ActionResult,利用FileResult我们可以很容易地将从某个物理文件的内容响应给客户端。ASP.NET MVC定义了三个具体的FileResult,分别是FileContentResult、FilePathResult和FileStreamResult。在这篇文章中我们将探讨三种具体的FileResult是如何将文件内容对请求进行响应的。 阅读全文
posted @ 2012-08-14 08:49 Artech 阅读(48431) 评论(16) 推荐(29)
摘要: 定义在Controller中的Action方法大都返回一个ActionResult对象。ActionResult是对Action执行结果的封装,用于最终对请求进行响应。ASP.NET MVC提供了一系列的ActionResult,它们本质上是通过怎样的方式来响应请求的呢?这是这个系列着重讨论的主题 阅读全文
posted @ 2012-08-13 22:24 Artech 阅读(49480) 评论(15) 推荐(41)
摘要: 通过《实例篇》的实演示可以看出我们通过扩展实现的自动异常处理机制能够利用EntLib的EHAB根据执行的一场处理策略对某个Action方法执行过程中抛出的异常进行处理。对于处理后的结果,则按照请求类型(Ajax请求和非Ajax请求)以及当前方法是否设置了Handle-Error-Action名称对请求实施不同响应方法。总之,编程人员无须再写try/catch。 阅读全文
posted @ 2012-08-08 08:25 Artech 阅读(4837) 评论(7) 推荐(4)
摘要: 本篇文章利用ASP.NET MVC的扩展实现与EntLib的异常处理模块的继承,最终完成了自动化异常处理的实现。通过这个扩展,不仅仅可以采用配置的策略进行异常的处理,还能最终完成各种形式的错误消息的呈现。 阅读全文
posted @ 2012-08-07 07:59 Artech 阅读(5166) 评论(15) 推荐(15)
摘要: 在ASP.NET MVC中的四大筛选器(Filter),ActionFilter直接应用在某个Action方法上,它在目标Action方法执行前后对调用进行拦截以执行一些额外的操作。这是一种典型的AOP式的设计,如果我们需要在执行某个Action方法的前后执行一些操作,可以通过定义ActionFilter来实现。本篇文章主要讲述多一个应用到相同Action方法上的ActionFilter的执行机制。[本文已经同步到《How ASP.NET MVC Works?》中] 阅读全文
posted @ 2012-08-06 09:14 Artech 阅读(18051) 评论(20) 推荐(25)
摘要: 企业级Web应用的一个特点是以“数据处理”为主,所以“面向绑定”的Knockout.js 是一个不错的选择。ASP.NET Web API,作为.NET平台最好的REST服务开发平台(主要与WCF相比),则可以以服务的形式提供对数据的后台处理。 阅读全文
posted @ 2012-07-04 08:51 Artech 阅读(14310) 评论(36) 推荐(37)
摘要: 从命名来看,AuthorizationFilter用于完成授权相关的工作,所以它应该在Action方法被调用之前执行才能起到授权的作用。不仅限于授权,如果我们希望目标Action方法被调用之前中断执行的流程“做点什么”,都可以以AuthorizationFilter的形式来实现 阅读全文
posted @ 2012-07-02 22:39 Artech 阅读(50076) 评论(18) 推荐(50)
摘要: 在ActionInvoker对Action的执行过程中,除了通过利用ActionDescriptor对Action方法的执行,以及之前进行的Model绑定与验证之外,还具有一个重要的工作,那就是对相关筛选器(Filter)的执行。ASP.NET MVC的筛选器是一种基于AOP(面向方面编程)的设计,我们将一些非业务的逻辑实现在相应的筛选器中,然后以一种横切(Crosscutting)的方式应用到对应的Action方法。当Action方法执行前后,这些筛选器会自动执行。ASP.NET MVC提供了四种类型的筛选器(AuthorizationFilter、ActionFilter、ResultFilter和ExceptionFilter),它们对应着相应的筛选器接口(IAuthorizationFilter、IActionFilter、IResultFilter和IExceptionFilter)。 阅读全文
posted @ 2012-07-02 08:45 Artech 阅读(19857) 评论(32) 推荐(37)
摘要: 上周四在看Knockout.js的官方文档,阅读过程中顺便将其整理成了一份完整的文档,如果你对此有兴趣,可以从这里下载。 阅读全文
posted @ 2012-06-25 07:52 Artech 阅读(14232) 评论(26) 推荐(17)
摘要: 关于ASP.NET MVC对请求的处理方式(同步或者异步)涉及到的五个组件,在《上篇》中我们谈了三个(MvcHandler、Controller和ActionInvoker),现在我们来谈余下的两个,即ControllerDescriptor和ActionDescriptor,这五个组件的执行并非孤立的,而是具有议定的关系。相信读者认真阅读了这两篇文章后,会对整个请求的处理方式有一个深刻的理解。[ 阅读全文
posted @ 2012-06-22 08:50 Artech 阅读(9508) 评论(12) 推荐(18)
摘要: Action方法的执行具有两种基本的形式,即同步执行和异步执行,而在ASP.NETMVC的整个体系中涉及到很多同步/异步的执行方式,虽然在前面相应的文章中已经对此作了相应的介绍,为了让读者对此有一个整体的了解,我们来做一个总结性的论述。[本文已经同步到《How ASP.NET MVC Works?》中] 阅读全文
posted @ 2012-06-21 09:34 Artech 阅读(12908) 评论(20) 推荐(16)
摘要: Visual Studio提供的Controller创建向导默认为我们创建一个继承自抽象类Controller的Controller类型,这样的Controller只能定义同步Action方法。如果我们需要定义异步Action方法,必须继承抽象类AsyncController。这篇问你讲述两种不同的异步Action的定义方法和底层执行原理。 阅读全文
posted @ 2012-06-20 11:41 Artech 阅读(35151) 评论(38) 推荐(45)
摘要: 在简单了解了Unobtrusive JavaScript形式的验证在jQuery中的编程方式之后,我们来介绍ASP.NET MVC是如何利用它实现客户端验证的。服务端验证最终实现在相应的ModelValidator中,而最终的验证规则定义在相应的ValidationAttribute中;而客户端验证规则通过HtmlHelper相应的扩展方法(比如TextBoxFor、EditorFor和EdidtorForModel等)出现在生成的被验证HTML元素中。毫无疑问,服务端验证和客户端验证必须采用相同的验证规则,那么通过应用ValidationAttribute特性定义的验证规则也同样体现在基于客户端验证规则的HTML上。 阅读全文
posted @ 2012-06-18 06:30 Artech 阅读(15237) 评论(9) 推荐(13)
摘要: 之前我们一直讨论的Model验证仅限于服务端验证,即在Web服务器根据相应的规则对请求数据实施验证。如果我们能够在客户端(浏览器)对用户输入的数据先进行验证,这样会减少针对服务器请求的频率,从而缓解Web服务器访问的压力。在ASP.NET MVC 3.0中,jQuery验证框架被引入是我们可以采用Unobtrusive JavaScript的方式进行客户端验证。 阅读全文
posted @ 2012-06-17 10:28 Artech 阅读(20528) 评论(16) 推荐(19)
摘要: 对于Model验证,理想的设计应该是场景驱动的,而不是Model(类型)驱动的,也就是对于同一个Model对象,在不同的使用场景中可能具有不同的验证规则。举个简单的例子,对于一个表示应聘者的数据对象来说,针对应聘的岗位不同,肯定对应聘者的年龄、性别、专业技能等方面有不同的要求。但是ASP.NET MVC的Model验证确是Model驱动的,因为验证规则以验证特性的形式应用到Model类型及其属性上。这样的验证方式实际上限制了Model类型在基于不同验证规则的使用场景中的重用,本篇将提供一种解决方式实现多规则验证。 阅读全文
posted @ 2012-06-12 17:09 Artech 阅读(11251) 评论(15) 推荐(24)
摘要: ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model类型及其属性上的ValidationAttribute才有效。如果我们能够将ValidationAttribute特性直接应用到参数上,我们不但可以实现简单类型(比如int、double等)数据的Model验证,还能够实现“一个Model类型,多种验证规则”,本篇文章将为你提供相关的解决方案。 阅读全文
posted @ 2012-06-11 17:22 Artech 阅读(9338) 评论(19) 推荐(12)
摘要: DataAnnotationsModelValidator最终是通过它对应的ModelValidatorProvider,即DataAnnotationsModelValidatorProvider创建的。通过前面的介绍我们知道它是AssociatedValidatorProvider的子类,后者在用于获取ModelValidator的GetValidators方法中已经根据指定的Model元数据所有特性创建出来,DataAnnotationsModelValidator只需要从中筛选出继承自ValiationAttribute的验证特性并创建对象的DataAnnotationsModelValidator就可以了。 阅读全文
posted @ 2012-06-08 08:27 Artech 阅读(6206) 评论(2) 推荐(7)
摘要: 对于ASP.NET MVC基于标注特性的Model验证,很多人只知道应用在数据类型及其属性上用于定义验证规则和错误消息的ValidationAttribute。最终用于进行Model验证的是一个叫做ModelValidator的组件,而ValidationAttribute对应的ModelValidator为DataAnnotationsModelValidator,这篇简短的文章为你介绍ASP.NET MVC是如何针对Validation来创建DataAnnotationsModelValidator,以及后者如何利用前者实施Model验证的。 阅读全文
posted @ 2012-06-07 08:31 Artech 阅读(6607) 评论(4) 推荐(7)
摘要: 通过前面的介绍我们知道ModelValidatorProviders的静态只读Providers维护着一个全局的ModelValidatorProvider列表,最终用于Model验证的ModelValidator都是通过这些ModelValidatorProvider来提供的。对于该列表默认包含的三种ModelValidatorProvider来说,DataAnnotationsModelValidatorProvider无疑是最重要的,ASP.NET MVC默认提供的基于数据标注特性的声明式Model验证就是通过DataAnnotationsModelValidatorProvider提供的DataAnnotationsModelValidator来实现的。 阅读全文
posted @ 2012-06-06 09:08 Artech 阅读(20246) 评论(4) 推荐(11)
摘要: 在前面三篇文章(《ModelValidator》、《ModelValidatorProvider》和《ModelValidatorProviders》)中我们详细介绍了真正用于Model验证的ModelValidator以及相关的提供机制,接下来我们来讨论一下在这个以ModelValidator为核心的Model验证系统中,通过Model绑定得到的数据对象的验证是如何实现的 阅读全文
posted @ 2012-06-04 08:40 Artech 阅读(12301) 评论(7) 推荐(19)
摘要: 前面篇文章我们分别介绍用真正用于实施Model验证的ModelValidator,以及用于提供ModelValidator的ModelValidatorProvider,那么对于ASP.NET MVC的Model验证体系来说,最终是通过怎样的方式对ModelValidatorProvider进行注册,又是如何利用它们来创建相应的ModelValidator来实施Model验证的呢?这就是本篇文章论述的重点。 阅读全文
posted @ 2012-06-03 09:19 Artech 阅读(6164) 评论(7) 推荐(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 阅读(6645) 评论(6) 推荐(16)
摘要: 旨在为目标Action方法的执行绑定输入参数的Model绑定过程伴随着对Model的验证。借助相应的验证特性,我们可以直接以声明的方式在Model类型上定义验证规则,这些规则将会作为Model元数据的一部分。ASP.NET MVC的整个Model验证系统以组件ModelValidator为核心,或者说Model对象的验证最终通过某个ModelValidator对象来完成。 阅读全文
posted @ 2012-06-01 08:06 Artech 阅读(10185) 评论(12) 推荐(21)
摘要: 在本系列的前面两篇文章(《简单类型+复杂类型》、《数组》)我们通过创建的实例程序模拟了ASP.NET MVC默认使用的DefaultModelBinder对简单类型、复杂类型以及数组对象的Model绑定。现在我们按照相同的方式来分析基于集合和字典类型的Model绑定是如何实现的。[ 阅读全文
posted @ 2012-05-31 08:35 Artech 阅读(10283) 评论(11) 推荐(17)
摘要: 基于数组和集合类型的Model绑定机制比较类似,对于绑定参数类型或者参数类型的某个属性为数组或者集合,如果ValueProvider根据对应的Key能够匹配多条数据,那么这些数据最终将会转换为绑定的数组/集合的元素。此外,针对数组/集合的Model绑定还支持基于索引的方式。 阅读全文
posted @ 2012-05-30 08:11 Artech 阅读(13750) 评论(9) 推荐(13)
摘要: 总的来说,针对目标Action方法参数的Model绑定完全由组件ModelBinder来实现,在默认情况下使用的ModelBinder类型为DefaultModelBinder,接下来我们将按照逐层深入的方式通过一个模拟程序来介绍实现在DefaultModelBinder的默认Model绑定机制。 阅读全文
posted @ 2012-05-23 08:20 Artech 阅读(15759) 评论(14) 推荐(18)
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 23 下一页