随笔分类 - [61]MVC
-
ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上
摘要:ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model类型及其属性上的ValidationAttribute才有效。如果我们能够将ValidationAttribute特性直接应用到参数上,我们不但可以实现简单类型(比如int、double等)数据的Model验证,还能够实现“一个Model类型,多种验证规则”,本篇文章将为你提供相关的解决方案(源代码从这里下载)。[本文已经同步到《How ASP.NET MVC Works?》中]目录一、ValidationAttribute本身是可以应用到参数上的二、为什么需要基于参数的Model验证?三、如何得到应用在参 阅读全文
-
使用MvcContrib分离ASP.NET MVC项目
摘要:概述在ASP.NET MVC复杂项目的开发中,随着项目规模的扩大,我们可能需要对不同模块按需进行分离。可以使用ASP.NET MVC框架提供的“区域(Areas)”功能来组织项目,具体参见《使用Areas分离ASP.NET MVC项目》。但是从上文可以看出,几个项目都是围绕Areas,通过“Build Event”最后整合到一起,总是有些“藕断丝连”的感觉。可以说,通过Areas独立出来的项目,并没有达到彻底的分离。在上文的评论中,有朋友指出可以使用MvcContrib,于是学习了一下。MvcContrib(Portable Area)可以将一个MVC项目里的所有内容(包括Views,Cont 阅读全文
-
ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidatorProvider
摘要:DataAnnotationsModelValidator最终是通过它对应的ModelValidatorProvider,即DataAnnotationsModelValidatorProvider创建的。通过前面的介绍我们知道它是AssociatedValidatorProvider的子类,后者在用于获取ModelValidator的GetValidators方法中已经根据指定的Model元数据所有特性创建出来,DataAnnotationsModelValidator只需要从中筛选出继承自ValiationAttribute的验证特性并创建对象的DataAnnotationsModelVa 阅读全文
-
ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator
摘要:对于ASP.NET MVC基于标注特性的Model验证,很多人只知道应用在数据类型及其属性上用于定义验证规则和错误消息的ValidationAttribute。通过《ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator》的介绍,我们知道了最终用于进行Model验证的是一个叫做ModelValidator的组件。ValidationAttribute对应的ModelValidator为DataAnnotationsModelValidator,这篇简短的文章为你介绍ASP.NET MVC是如何针对Validation来创建DataAnno 阅读全文
-
ASP.NET MVC基于标注特性的Model验证:ValidationAttribute
摘要:通过前面的介绍我们知道ModelValidatorProviders的静态只读Providers维护着一个全局的ModelValidatorProvider列表,最终用于Model验证的ModelValidator都是通过这些ModelValidatorProvider来提供的。对于该列表默认包含的三种ModelValidatorProvider来说,DataAnnotationsModelValidatorProvider无疑是最重要的,ASP.NET MVC默认提供的基于数据标注特性的声明式Model验证就是通过DataAnnotationsModelValidatorProvider提供 阅读全文
-
Model验证系统运行机制是如何实现的?
摘要:在前面三篇文章(《ModelValidator》、《ModelValidatorProvider》和《ModelValidatorProviders》)中我们详细介绍了真正用于Model验证的ModelValidator以及相关的提供机制,接下来我们来讨论一下在这个以ModelValidator为核心的Model验证系统中,通过Model绑定得到的数据对象的验证是如何实现的。[[本文已经同步到《How ASP.NET MVC Works?》中]目录一、从ModelState谈起二、实例演示:验证Model绑定过程中对ModelError的设置三、验证消息的呈现 HtmlHelper.Valid 阅读全文
-
基于mvc3的razor多用户店铺模板切换设计思路
摘要:mvc3的实际应用时间还是不长,有些东西正在摸索当中,项目是多用户多模版店铺,以下为实际开发过程中的解决办法,感觉解决方案不是最好的,但是目前只能想到这些,希望园里的大牛们给点建议。1.项目解决方案的目录结构。Syw.Core主要放实体类及依赖注入的程序及插件和数据访问接口。Syw.Data.SqlServer完全是一大堆sql,实现Syw.Core里的IData类。对orm我没深入使用过,还是觉得最大程度的控制我的sql比较放心,所有的集合都是List或者Ilist类型的。Syw.Services业务处理层,类似以前的bll,这里用的是静态方法,没有走接口了,项目不是特别大,一个人开发,接口 阅读全文
-
调试Razor从哪里开始
摘要:使用ASP.NET MVC时,我们知道,要使用Views中的视图,需要在Action中写return View();这个方法返回的返回值是一个 ViewResult,进入这个类,继承了父类ViewResultBase后只写了MasterName属性和FindView方法。不过已经开始看到到ViewEngine的踪影了。 protected override ViewEngineResult FindView(ControllerContext context) { ViewEngineResult result = ViewEngineCollection.... 阅读全文
-
ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProvider
摘要:在《ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator》中我们介绍了ASP.NET MVC用于Model验证的四种ModelValidator,那么这些ModelValidator是如何被创建的呢?ASP.NET MVC的很多组件(比如ModelBinder和Filter)都采用了基于Provider的提供机制,这篇文章为你讲述这些ModelValidator对应的ModelValidatorProvider。[本文已经同步到《How ASP.NET MVC Works?》中]目录一、ModelValidatorProvider二、D 阅读全文
-
ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator
摘要:旨在为目标Action方法的执行绑定输入参数的Model绑定过程伴随着对Model的验证。借助相应的验证特性,我们可以直接以声明的方式在Model类型上定义验证规则,这些规则将会作为Model元数据的一部分。具体在Model绑定过程中,ModelBinder通过ValueProvider为Model对象的某个属性提供相应属性值之后,会根据定义在基于该属性的Model元数据的验证规则实施验证。ASP.NET MVC的整个Model验证系统以组件ModelValidator为核心,或者说Model对象的验证最终通过某个ModelValidator对象来完成,所以我们有必要先来认识一下ModelVa 阅读全文
-
通过实例模拟ASP.NET MVC的Model绑定的机制:集合+字典
摘要:在本系列的前面两篇文章(《简单类型+复杂类型》、《数组》)我们通过创建的实例程序模拟了ASP.NET MVC默认使用的DefaultModelBinder对简单类型、复杂类型以及数组对象的Model绑定。现在我们按照相同的方式来分析基于集合和字典类型的Model绑定是如何实现的。[源代码从这里下载][本文已经同步到《How ASP.NET MVC Works?》中]一、集合这里的集合指的是除数组和字典之外的所有实现IEnumerable<T>接口的类型。和基于数组的Model绑定类似,ValueProvider可以将多个同名的数据项作为集合的元素,基于索引(基零整数和字符串)的数据 阅读全文
-
使用Areas分离ASP.NET MVC项目
摘要:。如果在Controllers文件夹下面有超过两位数controller,即便采用良好的命名规范,或者用子文件夹的形式区分不同功能的控制器,还是会影响项目的可阅读性和可维护性。因此,在一些场景下,如果能把与某功能相关的文件分离到一个独立的项目中是非常有用的。Asp.Net MVC提供了Areas(区域)的概念达到这一目的。一个典型的场景Web应用通常会有前台(面向用户)和后台(面向管理员)两部分,我们希望以/locahost/Admin开始的URL都为后台管理地址,因此我们也许会有这样的路由:?1234567891011routes.MapRoute( //Admin Route"A 阅读全文
-
PagedList是NuGet上提供的一个分页的类库
摘要:前几天看见博客园上有人写ASP.NET MVC的分页思想,这让我不禁想起了PagedList。PagedList是NuGet上提供的一个分页的类库,能对任何IEnumerable<T>进行分页,而且非常简单好用。从NuGet上,可以获取两个DLL:PagedList.dll和PagedList.Mvc.dll。PagedList.dll提供分页的核心操作,PagedList.Mvc.dll是一个辅助类库,在创建分页的UI时候提供简单、可扩展的创建方法。不过PagedList.dll可以用于MVC2及其以上,但是PagedList .Mvc.dll只能用于MVC3(及其以上)。 使用 阅读全文
-
通过实例模拟ASP.NET MVC的Model绑定机制:简单类型+复杂类型
摘要:总的来说,针对目标Action方法参数的Model绑定完全由组件ModelBinder来实现,在默认情况下使用的ModelBinder类型为DefaultModelBinder,接下来我们将按照逐层深入的方式介绍实现在DefaultModelBinder的默认Model绑定机制。[源代码从这里下载][本文已经同步到《How ASP.NET MVC Works?》中]目录一、简单类型二、复杂类型三、数组四、集合五、字典一、简单类型对于旨在绑定目标Action方法参数值的Model来说,最简单的莫过于简单参数类型的情况。通过《初识Model元数据》的介绍我们知道,复杂类型和简单类型之间的区别仅仅在 阅读全文
-
Session hijacking(会话劫持)
摘要:原理会话劫持是指通过非常规手段,来得到合法用户在客户端和服务器段进行交互的特征值(一般为sessionid),然后伪造请求,去访问授权用户的数据。获取特征值的非常规有段主要有如下几种:首先是猜测的方式,如果我们的sessionid的生成是有规律的,那么使用猜测的方式就可以到达非法获取的目的,如图所示:其次是session fixation攻击。session fixation攻击是指用户通过XSS、网络嗅探、本地木马来得到特征值,这些交互的特征值一般来说放置在浏览器的Cookie中(当然,我们也知道sessionid也可以通过URL来传递,这样的话,获取就简单多了)。然后诱使用户去完成一次登录 阅读全文
-
通过实例模拟ASP.NET MVC的Model绑定机制:数组
摘要:[续《通过实例模拟ASP.NET MVC的Model绑定机制:简单类型+复杂类型]》]基于数组和集合类型的Model绑定机制比较类似,对于绑定参数类型或者参数类型的某个属性为数组或者集合,如果ValueProvider根据对应的Key能够匹配多条数据,那么这些数据最终将会转换为绑定的数组/集合的元素。此外,针对数组/集合的Model绑定还支持基于索引的方式。[源代码从这里下载][本文已经同步到《How ASP.NET MVC Works?》中]一、基于名称的数组绑定对于针对NameValueConllectionProvider来说,通过GetValue方法得到的ValueProviderRe 阅读全文
-
理解MVC路由配置
摘要:URL路由不是MVC独有的,相反它是独立于MVC而单独存在的(在System.Web.Routing下)。因此,URL路由也能为传统的ASP.NET应用程序服务。我用一个简单的例子来解释路由,在我们的上一节的"ASP.NET MVC应用程序"中添加一个新的页面default.aspx,其后台代码如下:protected void Page_Load(object sender, EventArgs e){ var originalPath = Request.Path; HttpContext.Current.RewritePath(Request.ApplicationP 阅读全文
-
MVC 简单的分页思想与实现
摘要:ASP.NET MVC 简单的分页思想与实现 作为一个程序猿,数据分页是每个人都会遇到的问题。解决方案更是琳琅满目,花样百出。但基本的思想都是差不多的。 下面给大家分享一个简单的分页器,让初学者了解一下最简单的分页思想,以及在ASP.NET MVC中的简单实现与应用。一,定义分页器类 在ASP.NET MVC中,分页的数据源可能是各种不同的类型,所以最好使用泛型来定义。public class PagingHelper<T> 二,基本三要素 实现分页人所共知的三个基本属性:DataSource:数据源,要知道数据源共计多少条数据,会对应一个数据源的方法-Count(),PageSi 阅读全文
-
python(贪吃蛇)
摘要:main 函数的对比Pythonc#if __name__ == '__main__': """ sssssss """ #ssssssssss print("hello world") /// <summary> /// main 函数的注释 /// </summary> /// <param name="args"></param> static void Main(string[] args) { // 注释 输出hello 阅读全文
-
组件通信与ASP.NET Routing
摘要:记得在上篇文章说道MVC三组件间的通信。通信,顾名思义,就是两个媒介之间交换或共享信息(我的理解哈,哈哈哈)。在ASP.NET MVC中,Model、View,Controller是如何通信的呢?先看一张图。 解释一下:说道MVC中的通信,首先要考虑的肯定是Controller与View之间的通信,因为Controller和Model的通信很简单,就是Controller对Model中类的调用(或许这样说有点不对)。但是在对ASP.NET不很了解的时候,我经常把View和Brower等同起来。其实不然,当我们输入Url,Brower(浏览器)会想Controller Class发送一个请求(. 阅读全文