Model注解的后台原理

Asp.net MVC的验证特性是由模型绑定器、模型元数据、模型验证器和模型状态组成的协调系统的一部分。

1.验证和模型绑定

默认情况下,Asp.net MVC框架在模型绑定石执行验证逻辑,在操作方法带有参数时,模型绑定将隐式地执行

[HttpPost]
Public ActionResult Create(Album album)
{
      // todo.....
}

也可利用控制器的UpdateModel或TryUpdateModel方法显示的执行模型绑定:

[HttpPost]
Public ActionResult Eidt(int id, FormCollection collection)
{
       Var album = storeDB.Album.Find(id);
       if (TryUpdateModel(album))
       {
           //todo.....
       }
}

模型绑定器一旦使用新值完成对模型属性的更新,就会利用当前的模型元数据获得模型的所有验证器。Asp.net MVC运行时提供了一个验证器(DataAnnotationsModelValidator)来与数据注解一同工作。这个模型验证器会找到所有的验证特性并执行塔门包含的验证逻辑。模型绑定器捕获所有失败的验证规则并把它们放入模型状态中。

2.验证和模型状态

模型绑定的主要副产品就是模型状态(利用Controller派生类对象的ModelState属性可以访问到)。模型状态不仅包含了用户所有项放入模型属性里的值,也包括与每一个属性相关联的所有错误(还有所有与模型对象本身有关的错误)。如果在模型状态中存在错误,那么ModelState.IsValid就返回Fasle.

如同运行时自动地向模型状态注入验证错误信息一样,它也能够自动地从模型状态中提取错误信息。

控制器操作通常需要关心的问题是:模型状态是否有效?

Model注解的后台原理

时间: 2024-08-05 19:37:41

Model注解的后台原理的相关文章

Spring2.5学习3.2_编码剖析@Resource注解的实现原理

首先看一下J2EE提供的@Resource注解:该注解默认安照名称进行装配,名称能够通过name属性进行指定, 假设没有指定name属性,当注解写在字段上时,默认取字段名进行依照名称查找,假设注解写在setter方法上默认取属性名进行装配. 当找不到与名称匹配的bean时才依照类型进行装配.可是须要注意的是,假设name属性一旦指定.就仅仅会依照名称进行装配. 这里我们模拟@Resource注解,便于理解注解的实现原理: 1.首先在前面模拟的容器中加入注入的方法annotationInject(

深入理解java注解的实现原理

今天将从以下4个方面来系统的学习一下java注解 什么是注解 注解的用途 注解使用演示 注解的实现原理 1,什么是注解 注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包.类.接口.字段.方法参数.局部变量等进行注解 一般常用的注解可以分为三类: 一类是Java自带的标准注解,包括@Override(标明重写某个方法).@Deprecated(标明某个类或方法过时)和@SuppressWarnings(

springMVC [email protected]注解(后台控制器获取参数)

在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取. 1.获取提交的参数: @RequestMapping("testRequestParam") public String filesUpload(@RequestParam String inputStr, HttpServletRequest request) { System.out.pri

[技术分享] 20171211_后端开发_使用@DateTimeFormat注解解决前台string类型与后台date类型的转换,使用@JsonFormat注解解决后台date类型与前台string类型的转换

说明: 有的时候由前台jsp页面填写一个日期,提交到后台spring mvc的时候,我们希望直接转换成一个Date类型,而不是由一个string 类型接收,然后再通过simpleDateFormat来进行转格式,这样太麻烦了,代码会显的很乱,spring为我们提供了类型转化器,写起来也是很麻烦,我们的需求很简单就是由框架帮我们去自动的转换类型而不是手动的转换,在这样的背景下,我们可以使用@DateTimeFormat注解.此外我们还有一个需求就是我们从数据库里面查询到了日期,然后我们想把这个日期

007-Spring Boot @Enable*注解的工作原理

一.@Enable* 启用某个特性的注解 1.EnableConfigurationProperties 回顾属性装配 application.properties中添加 tomcat.host=192.168.2.1 tomcat.port=8080 增加属性类TomcatProperties package com.lhx.spring.springboot_enable; import org.springframework.boot.context.properties.Configur

spring注解开发-扩展原理(源码)

1.BeanFactoryPostProcessor BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作的; BeanFactoryPostProcessor:beanFactory的后置处理器:在BeanFactory标准初始化之后调用,来定制和修改BeanFactory的内容:即所有的bean定义已经保存加载到beanFactory,但是bean的实例还未创建: BeanFactoryPostProcessor原理: 1)IOC容器创建对象 2)调

注解Annotation实现原理与自定义注解例子

? 什么是注解? 对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类.方法.成员变量等)进行关联.为程序的元素(类.方法.成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定的工具或框架使用. Annontation像一种修饰符一样,应用于包.类型.构造方法.方法.成员变量.参数及本地变量的声明语句中. Java注

Spring(八)编码剖析@Resource注解的实现原理

beans2.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframew

Spring高级话题[email&#160;protected]***注解的工作原理

出自:http://blog.csdn.net/qq_26525215 @EnableAspectJAutoProxy @EnableAspectJAutoProxy注解 激活Aspect自动代理 <aop:aspectj-autoproxy/> 开启对AspectJ自动代理的支持. 在用到AOP的自动代理的时候用,如果你理解了Java的动态代理,很容易的就会熟悉AOP的自动代理的. @EnableAsync @EnableAsync注解开启异步方法的支持. 这个相信大家都比较熟悉的.对于异步