Asp.Net Mvc: Model Binding 机制分析

环境:

Windows 2008, VS 2008 SP1, Asp.Net Mvc RC1

请求过程片段:

在请求的Action被调用之前,ControllerActionInvoker.InvokeAction()方法被调用,在这个方法里 面,有一个ReflectedActionDescriptor的实例会被构建,这个实例包含Action的描述信息。

接着,ControllerActionInvoker.GetParameterValues()方法被调用,通过传入的之前创建的 ReflectedActionDescriptor实例,获取Action参数列表(对应的ParameterDescriptor的实例分别被创建 ),进而遍历各参数,尝试获取参数的值,在遍历的循环里面, ControllerActionInvoker.GetParameterValue()方法被调用。

以下就是ControllerActionInvoker.GetParameterValue()方法的源代码:

protected virtual object GetParameterValue(ControllerContext controllerContext, 

ParameterDescriptor parameterDescriptor) {

            // collect all of the necessary binding properties

            Type parameterType = parameterDescriptor.ParameterType;

            IModelBinder binder = GetModelBinder(parameterDescriptor);

            IDictionary<string, ValueProviderResult> valueProvider = 

controllerContext.Controller.ValueProvider;

            string parameterName = parameterDescriptor.BindingInfo.Prefix ?? 

parameterDescriptor.ParameterName;

            Predicate<string> propertyFilter = GetPropertyFilter

(parameterDescriptor);

            // finally, call into the binder

            ModelBindingContext bindingContext = new ModelBindingContext() {

                FallbackToEmptyPrefix = 

(parameterDescriptor.BindingInfo.Prefix == null), // only fall back if prefix not specified

                ModelName = parameterName,

                ModelState = 

controllerContext.Controller.ViewData.ModelState,

                ModelType = parameterType,

                PropertyFilter = propertyFilter,

                ValueProvider = valueProvider

            };

            object result = binder.BindModel(controllerContext, bindingContext);

            return result;

        }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索实例
, 参数
, 方法
, Binder机制
Binder机制详解
,以便于您获取更多的相关知识。

时间: 2024-10-30 04:30:32

Asp.Net Mvc: Model Binding 机制分析的相关文章

Asp.Net Mvc: Model Binding to Simple Types, Complex Types,……

Asp.Net Mvc: Model Binding to Simple Types, Complex Types, Collections, Dictionaries, Etc 环境: Windows 2008, VS 2008 SP1, Asp.Net Mvc RC1 1. 简单类型 这里,我们将下面这个Book类称为简单类型: public class Book { public int BookId { get; set; } public string BookName { get;

ASP.NET MVC的运行机制

一.ASP.NET + MVC IIS与ASP.NET管道 MVC.MVP以及Model2[上篇] MVC.MVP以及Model2[下篇] ASP.NET MVC是如何运行的[1]: 建立在"伪"MVC框架上的Web应用 ASP.NET MVC是如何运行的[2]: URL路由 ASP.NET MVC是如何运行的[3]: Controller的激活 ASP.NET MVC是如何运行的[4]: Action的执行 二.URL 路由 ASP.NET的路由系统:URL与物理文件的分离 ASP.

通过扩展改善ASP.NET MVC的验证机制[使用篇]

原文:通过扩展改善ASP.NET MVC的验证机制[使用篇] ASP.NET MVC提供一种基于元数据的验证方式是我们可以将相应的验证特性应用到作为Model实体的类型或者属性/字段上,但是这依然具有很多的不足.在这篇文章中,我结合EntLib的VAB(Validation Application Block)的一些思想通过扩展为ASP.NET MVC提供一种更为完善的验证机制.[源代码从这里下载] 目录: 一.扩展旨在解决怎样的验证问题 二.一个简单的消息维护组件 三.多语言的支持 四.基于某

ASP.NET MVC Model元数据及其定制: 初识Model元数据

Contronoller激活之后,ASP.NET MVC会根据当前请求上下文得到目标Action的名称,然后解析出对应的方法并执行之.在整个Action方法的执行过程中,Model元数据的解析是一个非常重要的环节.ASP.NET MVC中的Model实际上View Model,表示最终绑定到View上的数据,而Model元数据描述了Model的数据结构,以及Model的每个数据成员的一些特性.正是有了Model元数据的存在,才使模板化HTML的呈现机制成为可能.此外,Model元数据支撑了ASP

ModelBinder:ASP.NET MVC Model绑定的核心

Model的绑定体现在从当前请求提取相应的数据绑定到目标Action方法的参数.通过前面的介绍我们知道Action方法的参数通过ParameterDescriptor来描述,ParameterDescriptor的BindingInfo属性表示的ParameterBindingInfo对象具有一个名为ModelBinder的组件用于完成针对当前参数的Model绑定.ModelBinder可以看成是整个Model绑定系统的核心,我们先来认识这个重要的组件. 一. ModelBinder 用于进行M

通过扩展改善ASP.NET MVC的验证机制[实现篇]

在<使用篇>中我们谈到扩展的验证编程方式,并且演示了本解决方案的三大特性:消息提供机制的分离.多语言的支持和多验证规则的支持,我们现在来看看这样的验证解决方案最终是如何实现的. 目录: 一.为验证创建一个上下文:ValidatorContext 二.通过自定义ActionInvoker在进行操作执行之前初始化上下文 三.为Validator创建基类:ValidatorBaseAttribute 四.通过自定义ModelValidatorProvider在验证之前将不匹配Validator移除

[转贴]ASP.Net MVC框架配置与分析

原文:http://www.cnblogs.com/birdshover/archive/2008/01/19/1043749.html 前几年的时候ASP.Net就有MVC的概念,实际上就是我们熟悉的WebForm开发模型. 1.Model层与视图无关,并且只与数据库相关: 伪代码: pulic class Model {       pulic DataSet ds()       {             //数据库库取数据             return ds;       }

ModelBinder——ASP.NET MVC Model绑定的核心

Model的绑定体现在从当前请求提取相应的数据绑定到目标Action方法的参数.通过前面的介绍我们知道Action方法的参数通过ParameterDescriptor来描述,ParameterDescriptor的BindingInfo属性表示的ParameterBindingInfo对象具有一个名为ModelBinder的组件用于完成针对当前参数的Model绑定.ModelBinder可以看成是整个Model绑定系统的核心,我们先来认识这个重要的组件.[本文已经同步到<How ASP.NET

ASP.NET MVC Model元数据及其定制:一个重要的接口IMetadataAware

在介绍用于自定义Model元数据属性的AdditionalMetadataAttribute特性时我们提到了它实现的接口IMedataAware,我们说这是一个非常重要并且有用的接口,通过自定义实现该接口的特性我们可以对最终生成的Model元数据进行自由地定制.如下面的代码片断所示,IMedataAware接口具有唯一的方法成员OnMetadataCreated.当Model元数据被创建出来后,会先获取上述的这一系列标注特性对其进行初始化,然后获取应用在目标元素上所有实现了IMedataAwar