摘要:我们知道DataAnnotations是一个通用的数据模型元数据定义框架,其中最主要的部分是验证框架的定义。DataAnnotations可用户.NET平台的任何应用框架,但我们的项目中都是借助MVC来使用DataAnnotations。在MVC框架中,还对DataAnnotations进行了很多的扩展和适配:比如需要根据定义的DataAnnotations,生成客户端的验证;在Controller模型中绑定模型对数据进行有效性验证等等。我们的数据模型如果都是通过MVC入口,用户输入有的有效性验证的工作都可以交给MVC框架和DataAnnotations来完成。在我们的实践中,这样确实给我们带
阅读全文
随笔分类 - .Net
摘要:前因 使用ASP.NET MVC时,我们必不可少的要与Attribute打交道,利用Attribute来做元数据的定义是一种非常老套的方法,但是相对于其方便快捷以及低廉的维护成本,还是在MVC框架中得到了充分的运用,主要是用于定义ModelMetadata。在现在的开发框架中,Attribute处理一个非常重要的地位。但是在使用Attribute过程,还是重复遇到了几回相同的问题,但由于缺少记录,...
阅读全文
摘要:很多时候,我们程序需要在后台线程定时执行一些任务,比如定时发送邮件。简单点,我们可以自己创建一个Timer对象来定时,通过定制它的回调事件来完成具体业务需求。对于比较复杂的业务要求,稳定性要求比较高,我们可以使用一些开源框架,比如Quartz.NET创建Windows Service的方式来执行定时任务。 虽然单独的Windows Service具体有稳定性较好等特点,Quartz.NET也可以满...
阅读全文
摘要:我们时常会为某一种具有相同的类(基类)或接口定义泛型的扩展方法,此时我们只需要在泛型扩展方法上加上泛型约束后,编译器在使用该类的派生类时就会自动筛选出可用的扩展方法。如下的定义:此时我们为Interface1定义一个扩展方法如下: 这很好,泛型的约束很好的表达了我们的意图。这个约束这时候能很好的避免这个扩展方法污染到其它类型的对象。接下来,当我们希望为再为其它的类型或接口定义相同的扩展方法时,有兴...
阅读全文
摘要:T4模板Visual Studio IDE的应用越来越多,现在在VS中,只要与代码生成相关的场景,我们都可以通过修改 T4模板来自定义生成格式,比如MVC的视图模板,Entity Framwork的DataContext模板等等。同时我们还可以自己创建T4模板文件(.tt),使用C#(VB)语法来编写T4模板,它的语法与ASP.NET的语法非常类似,大大降低了.NET程序员的学习成本,关于T4的模...
阅读全文
摘要:在MVC的Model中,我们可以定义很多与视图相关的元数据,这些元数据对我们开发视图起着相当重要的作用,特别是在数据验证方面。这些元数据一般情况下我们是不会定义在业务实体(或持久化实体)上面,所以很多情况下,我们会需要开发两种实体:View Model和Business Model。这样就造成,在Action与View的沟通当中,我们需要使用View Model,然后在业务逻辑处理时,我们需要再将View Model映射到Business Model,这将会使我们的开发框架变得繁琐。因为一般情况下,View Model和Business Model在很多情况下,都是很雷同的对象,只是View
阅读全文
摘要:在ASP.NET MVC2中,我们经常这样来写表单模板:由于DataAnnotations的存在,我们完全可以把字段的视图元数据全部都在Model中设计好,那么开发编辑视图就变得非常的简单,可能只是对应Model的字段,一行一行的去写Html.EditorFor ,这是一种重复而枯燥的工作。因此我想到,写一个VS扩展,在HTML编辑器的右键菜单中添加一个命令,点一下就可以根据当前的Model的类型...
阅读全文
摘要:ASP.NET MVC2 结合System.ComponentModel.DataAnnotations 提供了一套非常有效的实体验证框架。对于错误信息的处理,它默认提供了两种选择: 字符串常量 从程序集资源文件读取 但是在我们这里,我们有一套自己的资源文件方案,也就是我们需要自己控件错误信息的本地化操作。由于在元数据,我们只能提供常量,无法进行字符串操作。一种比较直接和麻烦的办法就是重写所有的验证规则,在验证规则中对字符串常量进行本地化操作。但是这样做,一方面会比较麻烦,所有的验证规则我们都要进行重写;另一方面我们在设计model时就是特别的小心使用我们自己重写过的规则才能达到我们的目的
阅读全文
摘要:很多关于.NET 4.0新特性的介绍,缓存功能的增强肯定是不会被忽略的一个重要亮点。在很多文档中都会介绍到在.NET 4.0中,缓存功能的增强主要是在扩展性方面做了改进,改变了原来只能利用内存进行缓存的局限,允许用户在不改变代码的情况下通过修改配置的方式,灵活的切换缓存介质。Cache Provider是可扩展的,开发人员可以方便的将缓存存放在文件中,也可以扩展使用分布式缓存。然而,由于之前已经有System.Web.Caching.Cache这个缓存对象的存在,让我一直对.NET 4.0的新的Cache和原来已存在的System.Web.Caching.Cache的关系产生了一定的迷惑。通过
阅读全文
摘要:几天前,同事浪子在用VS2010创建MVC站点时,发现里面的页面模板中大量使用了一种新的模板语法:<%: %> ,由于之前他比较少使用ASP.NET MVC,还以为是MVC里面新增的一种模板语法,而我很早就开始使用MVC工程,但也从来没有见过此种语法。于我们共同断定这可能是ASP.NET4.0中新出的一种模板语法。果然,我们在ASP.NET 4.0白皮书上找到了答案:这是用于替代<...
阅读全文
摘要:如果你经常去查阅相关的互联网协议,比如:HTTP,MetaWeblog API,ATOM,WebDav,SMTP。你都会不经意的发现它们都有一个相对的RFC编号,这些编号会对应一个像“http://tools.ietf.org/html/rfc2616”的一个链接页面,这个页面详细说明了该协议的定义规范。通常一个协议都定义都需要比较长的内容,但是通过阅读这些协议本身我们就可以更好,更完全的理解该协...
阅读全文
摘要:ASP.NET MVC框架从还未正式发布时就已经成为了我工作的方向和重点,而它也在不断的完善和发展,前两天,ASP.NET MVC2 RTM已经发布了,MVC2主要是在提高我们基于ASP.NET MVC框架之上的WEB程序开发效率上下功夫,新增了很多的常用功能的集成,API的优化以及IDE的改善支持等方面。随着开发效率的不断提高和资源的不断丰富,以及MVC框架本身所具备的天生的优点,我相信未来ASP.NET平台的WEB开发将会逐步走向MVC方向。至少在ASP.NET Mobile Web的开发中,Webform已经被MVC所取代,在未来的ASP.NET中,包含Mobile WebForm 控件
阅读全文
摘要:ASP.NET中,所有的上下文对象(HttpContext,HttpReqeust,HttpResponse…)都没有进行抽象,而且它们都是自我封闭的对象,我们无法对它进行扩展和修改。虽然它们都提供公有构造器,我们可能也可以追溯到请求管道的源头,去自己实例化HttpContext,可是它们的大部分方法都是封闭的,不可重写的,这样使得我们在做多工作的时候无法称心如意,甚至于四处碰壁。 ASP.NET...
阅读全文
摘要:在Kooboo中使用了Entity Framework作为持久化框架,但由于EF1.0并没有提供完整缓存解决方案,一直以来都在为数据缓存而烦脑,在没有找到合适解决方案的情况下,采取了临时的解决办法:直接缓存实体。但是由于Entity实体都是带状态的,并且都与ObjectContext有间接的反向引用,缓存带状态的实体,会造成对象上下文混乱和连接资源的无法被正确释放。因此缓存的Entity实体,首先...
阅读全文
摘要:背景 随着Extjs的不断成熟,它也在不断的被开发人员所接受和使用。Extjs是一个完全的UI框架,它自带的控件已经能很好的满足日常开发的需要,并且它底层仍是以html和样式为基础,在不满意需求特殊需求的情况,我们也非常方便的进行扩展。所以,我一贯的态度是,要使用extjs就要用的彻底,UI部分应该完全使用Extjs来实现,完全摈弃传统的ASP.NET前台模式。当然,现在也有一些把Extjs封装成...
阅读全文
摘要:去年这个时候也是8月份,离开了生活9年的福州来到厦门,已整整一年的时间。离开福州的原因,就是不想让自己在安逸中沉沦下去,需要重新寻找技术的激情。来到新公司后,也开始投入老板梦想中的那个伟大CMS的研发工作,至今仍在不断的忙碌。当时的我,对CMS的概念的并不是特别理解,时至今日,我仍然无法很清楚的定义什么才是CMS。CMS是Content Managment System的缩写,意为内容管理系统,但...
阅读全文
摘要:System.Web.Compilation.BulidManager负责站点的动态编译,所有的页面、用户控件、和所有的ASP.NET特殊目录,都会在运行时被BuildManager编译和处理,也包括Bin目录。我们知道在ASP.NET中,所有的页面和控件都包括.ASPX和后台代码文件,除了代码文件在编译时会被静态编译成一个类型外,.ASPX文件在运行时也会被动态编译在一个动态类型中,以便写在.A...
阅读全文
摘要:利用IIS带的SMTP虚拟服务器,可以匿名发送邮件,并且通过telnet就可以发送,一直只是看过别人做过,并且看过很多遍,自己没有尝试过还是无法即拿即用,今天还是亲手尝试了一下,并记录以下的发送步骤。 使用Telnet发送邮件: 打开cmd命令行 输入telnet 127.0.0.1 25,连接本地邮件服务器 输入HELO,建立会话,返回250成功代码。 输入MAIL FROM:youname@s...
阅读全文
摘要:CS-Script是基于ECMA CLR标准之上的动态编译C#脚本的编译引擎。利用CS-Script可以在系统中动态编译一段C#脚本,并以静态函数或实例对象的形式使用。放在一个系统框架中,可以起到部分动态语言的效果。先看看它的使用:Assembly assembly = CSScript.LoadCode( @"using System; public class Script { public ...
阅读全文
摘要:在ASP.NET MVC中,如何来实现表单的验证与授权访问呢?至少在CTP3中,还没有一个官方的解决方案。ASP.NET WebForm的表单验证和授权机制是否适合在ASP.NET MVC中使用呢?带着这些问题来进入我们今天的主题。 在ASP.NET WebForm的架构下,我们可以通过一定的配置即可实现用户身份验证和授权。特别是在ASP.NET 2.0的Membership功能的支撑下,可以做到更加简洁可复用的用户验证系统。通过web.config可以做到对页面或目录对不同用户身份可见性的定制,但是它是基于物理文件和目录。而在ASP.NET MVC架构下,用户访问的每一个页面在磁盘中并没有一
阅读全文