首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ASP.NET MVC以ModelValidator为核心Model验证体系: ModelValidator

ASP.NET MVC整个Model验证系统以组件ModelValidator为核心,或者说Model对象验证最终通过某个ModelValidator对象来完成,所以我们有必要先来认识一下ModelValidator...MemberName和Message,前者代表被验证数据成员名称,后者表示错误消息。...等)方式来定义相应验证规则,这是ASP.NET MVC 提供默认Model验证方式。...如下面的代码片断所示,IDataErrorInfo具有两个成员,只读属性Error用于获取基于自身错误消息,而只读索引用于返回指定数据成员错误消息。...而对于该对象属性验证则采用另一个类型为DataErrorInfoPropertyModelValidator对象,DataErrorInfoPropertyModelValidator会将属性名称作为调用索引参数从而获得相应错误消息

1.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

ASP.NET MVC Controller激活系统详解:总体设计

由于具有多个Controller与注册路由规则相匹配导致ASP.NET MVCController激活系统无法确定目标哪个类型Controller应该被选用,所以会出现如下图所示错误。...目前定义了HomeController两个命名空间具有相同优先级,现在我们将其中一个定义在当前ControllerBuilder默认命名空间列表中以提升匹配优先级。...在路由注册时指定命名空间比当前ControllerBuilder默认命名空间具有更高匹配优先级,但是对于这两个集合中所有命名空间却具有相同匹配优先级。...现在我们对本例路由注册代码作了如下修改,为注册路由对象指定了两个命名空间(分别是两个HomeContrller所在命名空间),运行我们程序依然会得到如第一张图所示错误。...[关于ASP.NET MVC路由,在我文章《ASP.NET MVC路由扩展:路由映射》中具有详细介绍] 在解析Controller真实类型过程中,会先通过RouteData包含命名空间来解析Controller

1.7K60

ASP.NET MVC 5 - 查询Details和Delete方法

两个方法签名如下所示: // GET: /Movies/Delete/5 public ActionResult Delete(int?...,需要方法具有独特唯一签名 (方法名称相同但不同参数列表)。...但是,在这里您需要两种删除方法 — — 一个 GET方法和一个POST方法它们都具有相同签名。(他们都需要接受一个整数作为参数)。 要解决这一点,可以有几种办法。一是使用不同方法名称。...这是框架代码在前面的示例中所使用方法。然而,这就带来了一个小问题: ASP.NET 将部分 URL按名称映射到操作方法,如果您重命名了方法,通常Routing将无法找到该方法。...另一个常见方法,来避免具有相同名称和签名方法,是人为地改变POST 方法,包括未使用参数签名。

3K60

ASP.NET MVC以ModelValidator为核心Model验证体系: ModelValidatorProvider

在《ASP.NET MVC以ModelValidator为核心Model验证体系: ModelValidator》中我们介绍了ASP.NET MVC用于Model验证四种ModelValidator...[本文已经同步到《How ASP.NET MVC Works?》...GetValidators方法具有两个参数,类型ModelMetadatametadata参数用于或者相应验证规则,而参数context则是表示当前Model绑定上下文ModelBindingExecutionContext...方法中,如果当前Model元数据是基于某个属性(表示容器类型ContainerType不会Null并且具有属性名称),在调用GetTypeDescriptor方法获取容器类型描述对象,进而根据属性类型得到用于描述属性...前者对Contact对象本身实施验证,并将Error属性作为验证结果错误消息;后者针对应属性实施验证,验证结果错误消息来源于将属性名称作为索引值。

1.3K10

Asp.Net MVC4入门指南(9):查询详细信息和删除记录

将删除数据HttpPost方法命名为唯一签名或名称 DeleteConfirmed 方法。...,需要方法具有独特唯一签名 (方法名称相同但不同参数列表)。...但是,在这里您需要两种删除方法 — — 一个 GET方法和一个POST方法它们都具有相同签名。(他们都需要接受一个整数作为参数)。 要解决这一点,可以有几种办法。一是使用不同方法名称。...这是框架代码在前面的示例中所使用方法。然而,这就带来了一个小问题: ASP.NET 将部分 URL按名称映射到操作方法,如果您重命名了方法,通常Routing将无法找到该方法。...另一个常见方法,来避免具有相同名称和签名方法,是人为地改变POST 方法,包括未使用参数签名。

1.9K80

ASP.NET MVC是如何运行(4): Action执行

作为Controller基类ControllerBaseExecute方法核心在于对Action方法执行和作为方法返回ActionResult执行,两者执行是通过一个叫做ActionInvoker...由于Action方法具有相应参数,在执行Action方法之前必须进行参数绑定。ASP.NET MVC将这个机制成为Model绑定,而这又涉及到另一个重要组件ModelBinder。...,这与在真正ASP.NET MVC同名接口定义不尽相同。...和真正ASP.NET MVC一样,定义在ContrllerAction方法返回一个ActionResult对象,我们通过指定它Execute方法是先对请求响应。...MVC是如何运行[1]: 建立在“伪”MVC框架上Web应用 ASP.NET MVC是如何运行[2]: URL路由 ASP.NET MVC是如何运行[3]: Controller激活

1K101

ASP.NET MVC5请求管道和生命周期

请求处理管道 请求管道是一些用于处理HTTP请求模块组合,在ASP.NET中,请求管道有两个核心组件:IHttpModule和IHttpHandler。...从IIS7开始两个管道合二为一,称为集成管道。 ? 上图中主要描述ASP.NET运行时对HTTP请求处理且不涉及太多细节。...ASP.NET MVC中,路由数据必须包含controller和action名称),再有RouteData获取IRouteHandler最终有IRouteHandler得到IHttpHandler。...Action ASP.NET MVC中ControllerBase是所有Controller基类,在该类型Execute方法中通过IActionInvokerInvokeAction方法来执行对Action...和FilterScope数值越小,过滤器执行优先级越高; Order比FilterScope具有更高优先级,在Order属性值相同时FilterScope才会被考虑 //数值越小,执行优先级越高

1.6K30

通过实例模拟ASP.NET MVCModel绑定机制:数组

此外,针对数组/集合Model绑定还支持基于索引方式。[源代码从这里下载][本文已经同步到《How ASP.NET MVC Works?》...为了演示针对数组Model绑定,我们按照如下方式修改了Action方法。该方法具有两个参数foo和bar,前者是一个字符串数组,后者类型BarBaz属性是一个整型数组。...NameValueCollectionValueProvider具有针对这两个参数数据源,从上面的代码片断所示,针对参数foo和bar数据项具有相同名称(foo和bar.baz)。...索引数据项名称为“index”,并且与数组元素数据项具有相同前缀。...MVCModel绑定机制:简单类型+复杂类型 通过实例模拟ASP.NET MVCModel绑定机制:数组 通过实例模拟ASP.NET MVCModel绑定机制:集合+字典

3.2K90

ASP.NET MVC是如何运行: URL路由

目标Controller和Action名称包含在HTTP请求中,而ASP.NET MVC首要任务就是通过当前HTTP请求解析得到正确Controller和Action名称。...对于每一个抵达HTTP请求,ASP.NET MVC会遍历路由表找到一个URL模板模式与请求地址相匹配路有对象,并最终解析出以Controller和Action名称核心路由数据。...在我们自定义ASP.NET MVC框架中,路由数据通过具有如下定义RouteData类型表示。...我们之前已经提到过ASP.NET MVC本质上是两个自定义ASP.NET组件来实现,一个是自定义HttpModule,另一个是自定义HttpHandler,而后者从RouteDataRouteHandler...MVC提供基于URL模板路由机制是通过具有如下定义Route类型实现

1.7K60

ASP.NET MVC四种验证编程方式

ASP.NET MVC采用Model绑定为目标Action生成了相应参数列表,但是在真正执行目标Action方法之前,还需要对绑定参数实施验证以确保其有效性,我们将针对参数验证成为Model绑定。...实际上这也是ASP.NET MVCModel验证系统默认支持编程方式。...如果数据成员没有通过验证,我们通过一个ValidationResult对象封装错误消息和数据成员名称(属性名),该方法最终返回是一个元素类型为ValidationResult集合。...如下面的代码片段所示,IDataErrorInfo具有两个成员,只读属性Error用于获取基于自身错误消息,而只读索引用于返回指定数据成员错误消息。...在实现索引中,我们将索引参数columnName视为属性名称,根据它按照上面的规则对相应属性成员实施验证,并在验证失败情况下返回相应错误消息。

1.4K80

ASP.NET Core MVC 概述

但这会加大更新、测试和调试代码难度,该代码在这 3 个领域两个或多个领域间存在依赖关系。 例如,用户界面逻辑变更频率往往高于业务逻辑。...提示 如果发现控制器操作经常执行相同类型操作,则可将这些常见操作移入筛选器,并遵守“不要自我重复”原则。...什么是 ASP.NET Core MVC ASP.NET Core MVC 框架是轻量级、开源、高度可测试演示框架,并针对 ASP.NET Core 进行了优化。...Core MVC 建立在 ASP.NET Core 路由之上,是一个功能强大 URL 映射组件,可用于生成具有易于理解和可搜索 URL 应用程序。...C#复制 [Authorize] public class AccountController : Controller { 区域 区域提供将大型 ASP.NET Core MVC Web 应用分区为较小功能分组方法

6.4K20

Model验证系统运行机制是如何实现

Value和Errors两个核心属性,前者表示ValueProvider提供ValueProviderResult对象,后者表示针对该数据对象错误集合,其类型为ModelErrorCollection...MVC以ModelValidator为核心Model验证体系: ModelValidatorProviders》),并设置了相应错误信息。...(《ASP.NET MVC以ModelValidator为核心Model验证体系: ModelValidatorProviders》),也就是针对Contact对象验证并不会递归地对Address对象属性实施验证...c.Address.District) 9: @Html.ValidationMessageFor(c=>c.Address.Street) 10: 通过这两个呈现出来验证消息具有相同显示效果...在Action方法Index中,我们通过调用当ModelState属性AddModelError方法认为地添加三个错误消息,对应ModelState名称与作为ModelContact类型属性名称一致

1.8K110

ASP.NET MVC 2示例Tailspin Travel UI层分析

它可用于任何类型ASP.NET应用,包括基于ASP.NET Web Forms和ASP.NET MVC应用。...下面我们来具体分析前台和管理后台: 前台采用ASP.NET MVC 2开发,比较简单,主要是使用ViewModels,HtmlHelper,输出缓存,避免CSRF攻击,查询方法中使用PartialView...ASP.NET 动态数据具有自动格式功能:比如 bit 类型字段显示为一个多选框,而标识字段不会在插入数据时显示出来。...使用DisplayName更改界面的显示,DisplayName 只能用于类、方法、属性、索引、事件 [MetadataType(typeof(CarRentalMetadata))]    ...,Tailspin Travel用来对付管理后台开发方面具有非常高效率,在前台使用MVC2保证性能,在UI界面的开发方面非常值得借鉴一种模式。

1.6K90

如何在 ASP.NET MVC 中集成 AngularJS(1)

HTML5 History API 是通过脚本来操作浏览器历史记录标准方法,以这点为核心,是实现单页面应用重点。...作为一个例子,在一般 JavaScript 中,错误输入变量名称会创建一个新全局变量。在严格模式下,这将抛出一个错误,因此无法意外创建一个全局变量。...主页索引 Razor 视图和 MVC 路由 ASP.NET MVC 中集成 AngularJS 一件有趣事情,就是应用程序实际上是如何启动和实现路由。...MVC 路由表中配置,会将应用路由到 MVC Home 主控制器,并执行主控制器中索引方法。...在下面的例子中,提供了一种用于注册和动态加载两个控制器和服务注册方法。如果你愿意,也可以包括 Angular 全部库和指令注册功能。

7.5K60
领券