MVC之模型绑定
1、前言 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
Model又是如何接收客户端输入的信息呢??在传统的WebForm获取提交表单信息一般都是Request.Form[""],Request.QueryString[""]方式接收表单内容但是在MVC中提供了模型绑定机制。让后台获取表单信息或Url中的参数变得更加方便。
2、默认模型绑定 ASP.NET MVC提供了IModelBinder的默认实现,这个实现的类叫DefaultModelBinder在提交表单信息时几乎感觉不到这个东西的存在,因为它自动将Request的信息转化为Action需要的参数对象。自从它的诞生解决了开发人员编写大量代码来获取Request请求信息。
下面我们来看看一个简单的例子(相关实体、与前端操作界面以及Controller信息):


UserModel是一个复合类型,现在我们提交表单看看DefaultModelBinder能否将请求参数转化为UserModel对象,并观察请求文本信息

观察请求信息,其实将整个表单通过键值对的形式序列化成一个字符串,再将该字符串传到服务器,然后由ModelBinder转为相应的Action参数信息


3、自定义模型绑定
现在我们来分析一下DefaultModelBinder是如何实现其功能(原理),当客户端发送一个请求(Request)->路由器分析(Routing)->控制器工厂(ControllerFactory)->控制器 (Controller)->调用方法(Action Invoke)->创建(ActionInvoke实例对象)->获取参数信息(GetParameterValue)->绑定模型 (ModelBinder)->获取验证器(GetValidators)->验证模型->进入方法体->Response的一个过程。
a.首先申明一个自定义模型(UserBinderModel)实现IModelBinder接口

b.在Action上使用添加模型绑定功能

c.客户端发送HTTP请信息

d.实现模型自定义绑定功能

学习了自定义模型大家可以任意做出个人风格的模型绑定器;如参数名Name=[Crazier|20]的信息表示UserModel对象中Name=Crazier,Age=20的风格,太COOL了
大多数情况下我们会使用Model对象一些比较复杂的事情,DefaultModelBinder会循环每一个参数赋值,当我们不相对一些参数进行绑定时怎么办??MVC针对这些问题做了如下处理[Bind]:
a.Include添加需要绑定的属性,各个属性之间以逗号进行分隔。
b.Exclude添加不需要绑定的属性,各个属性之前以逗号分隔。
c.Prefix表示请求参数的前缀。
MVC之模型绑定的更多相关文章
- ASP.NET MVC数组模型绑定
在ASP.NET MVC中使用Razor语法可以在视图中方便地展示数组,如果要进行数组模型绑定,会遇到索引断裂问题,如下示例: <input type="text" name ...
- .net的WebForm模拟MVC进行模型绑定,让自己少操劳
一.前言 用过MVC的兄弟们都知道,MVC有模型绑定表单提交的数据功能,那么我也想偷个懒也写个WebForm版的模型绑定.这里主要定义一个泛型方法,然后通过反射把表单上对应属性名字的值赋值到反射创建类 ...
- MVC数组模型绑定
ASP.NET MVC数组模型绑定 在ASP.NET MVC中使用Razor语法可以在视图中方便地展示数组,如果要进行数组模型绑定,会遇到索引断裂问题,如下示例: <input type=& ...
- asp.net MVC 自定义模型绑定 从客户端中检测到有潜在危险的 Request.QueryString 值
asp.net mvc 自定义模型绑定 有潜在的Requset.Form 自定义了一个模型绑定器.前端会传过来一些敏感字符.调用bindContext. valueProvider.GetValue( ...
- ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- MVC复杂模型绑定
当初遇到业务需求ajax提交一组对象数组到服务器.但是苦于mvc的默认绑定器.绑定不上去.好吧只有靠自己了. 当初就是参考这个大大的博客:http://www.cnblogs.com/xfrog/ar ...
- 白话学习MVC(六)模型绑定
一.什么是模型绑定? 模型绑定存在的意义就是为Action的参数提供值,例如:如下表单中提交了数据,那么Action(即:Index)的参数Id,Name的值就是表单中对应的name属性相同的值,而表 ...
- asp.net mvc 自定义模型绑定
在asp.net mvc的控制器中如果能够活用模型的自动绑定功能的话能够减少许多工作量.但是如果我们想要对前台传来的数据进行一些处理再绑定到模型上,该怎么做呢? 这里用一个绑定用户数据的小案例来讲解a ...
- [MVC]自定义模型绑定器,从表单对模型进行赋值
一.奇葩的问题 之前自己造轮子的时候,遇到一个很奇怪的问题,虽然需求很奇葩,但是还是尝试解决了一下 当提交的表单里包含多个重复名称的字段的时候,例如 <form action="/Te ...
随机推荐
- 【python自制】让大白成为你的个人助手!
我做这个软件就是要让卖萌进行究竟! 官方站点:http://www.jackeriss.com/companions.htm GitHub:https://github.com/Jackeriss/C ...
- Windows系统下JAVA开发环境搭建
首先我们需要下载JDK(JAVA Development Kit),JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库. 下载地址:http://www.or ...
- Ubuntu下Zabbix安装及使用问题
1.configure: error: MySQL library not found MySQL library not found root@kallen:~# apt-get install l ...
- Office Excel找不到PERSONAL.XLS怎么办
网上有人说这个文件在XLSTART里面,但是我里面没东西 打开PERSONAL.XLS的情况下,点击文件,属性,弹出窗口就有他的位置 你还是直接用Everything搜索一下吧.
- Postgis经常使用函数
1,基本操作函数 AddGeometryColumn(<schema_name>, <table_name>,<column_name>, <srid> ...
- checkstyle+ant生成checkstyle报告
<?xml version="1.0" encoding="UTF-8" ?> <project name="tibim" ...
- HttpURL连接远程serverGet和Post方式请求并返回数据
查看原文:http://www.ibloger.net/article/1813.html package cn.gis; import java.io.BufferedReader; import ...
- String类的四个默认成员函数
优化版的拷贝构造函数,先创建一个暂时实例tmp,接着把tmp._ptr和this->_ptr交换,因为tmp是一个局部变量.程序执行到该函数作用域外,就会自己主动调用析构函数.释放tmp._pt ...
- js 判断手机横竖屏的实现方法(不依赖任何其他库)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 2.eclipse 插件安装烦死人(2)
安装插件的实际结果是:(烦死人),要不是很多插件找不到,要不就是版本不对,要不就是下载了装上没有效果,要不就是在线安装(速度爆慢),好不容易等到结果了,结果是些错…… 最后我的eclipse 3.5. ...