MVC中Model元数据及绑定机制

时间:2022-10-13 08:01:44

ASP.NET MVC的Model为View Model,表示最终呈现在View上的数据,而Model元数据的一个重要的作用在于控制对象在View上的呈现方式。说得更加具体点,就是基于某种数据类型的Model元数据用于指导最终生成怎样的HTML来呈现对应的Model对象。Model元数据的存在使模板化的HTML呈现机制成为可能。除此之外,Model元数据还服务于Model绑定和Model验证。

表示Model元数据的ModelMetadata对象最终是通过一个名为ModelMetadataProvider的组件提供的。

Model元数据的复杂类型和简单类型之间的区别仅仅在于它们是否支持针对字符串类型的转换(表单、JSON字符串以及查询字符串)。对于简单类型参数的Model绑定,只需要将参数名称或者通过应用在参数上的BindAttribute特性指定的前缀作为Key调用ValueProvider的GetValue方法,并将的到的ValueProviderResult对象转换成参数类型即可。

用于描述数据类型的Model元数据主要在View中为绑定的数据实现模板化的HTML呈现。它的一个主要的作用就是为定义在HtmlHelper<TModel>中的模板方法(这些模板方法包括Display/DisplayFor、Editor/EditorFor、DisplayForModel / EditForModel、Lable / LableFor、DisplayText / DisplayTextFor)提供辅助生成HTML的元数据信息。

MVC中Model元数据及绑定机制

Action参数值的绑定过程:核心InvokeAction方法用于执行指定的Action(假定Action方法返回一个ActionResult对象)。在该方法中我们针对自身类型创建出相应的ControllerDescriptor对象,并根据Action名称得到对应的ActionDescriptor对象。然后根据ActionDescriptor获取用于描述其参数的ParameterDescriptor列表,而Model绑定就是根据每个ParameterDescriptor进行的。

具体来说,根据针对ParameterDescriptor对象创建表示Model绑定上下文的ModelBindingContext对象,并对其ModelName、ModelState、ValueProvider、ModelMetadata和FallbackToEmptyPrefix属性进行了初始化。最后将该ModelBindingContext对象和当前ControllerContext作为参数调用ModelBinder的BindModel方法得到相应的参数值。所有的参数最终被添加到一个字典对象中(Key表示参数名称),它会作为参数钓鱼那个ActionDescriptor的Execute方法实现对指定Action的执行。

MVC中Model元数据及绑定机制的更多相关文章

  1. MVC之Model元数据

    Contronoller激活之后,ASP.NET MVC会根据当前请求上下文得到目标Action的名称,然后解析出对应的方法并执行之. 在整个Action方法的执行过程中,Model元数据的解析是一个 ...

  2. ASP&period;NET的MVC中Model对象字段的数…

    ASP.NET的MVC中Model对象字段的常用数据说明属性: Required——该字段不允许为空. MaxLength——设置数组或字符串最大长度. StringLength——设置字符串最小和最 ...

  3. MVC中Model和model的区别和用户

    MVC中Model和model的区别,它们应该怎么用呢? 使用@model关键字可以定义一个Action里所对应的一个模型(经常可以叫他实体类). MVC的第一个字母M是Model,承载着View层和 ...

  4. MVC中Model BLL层Model模型互转

    MVC中Model BLL层Model模型互转 一. 模型通常可以做2种:充血模型和失血模型,一般做法是模型就是模型,不具备方法来操作,只具有属性,这种叫做失血模型(可能不准确):具备对模型一定的简单 ...

  5. ThreadLocal,Java中特殊的线程绑定机制

    在DRP项目中,我们使用了ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个 ...

  6. Java-ThreadLocal,Java中特殊的线程绑定机制

    在DRP项目中,我们使用了ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个 ...

  7. 解决MVC中Model上的特性在EF框架刷新时清空的问题

    MVC中关于前端数据的效验一般都是通过在Model中相关的类上打上特性来实现. 但是在我们数据库发生改变,EF框架需要刷新时会把我们在Model上的特性全部清除,这样的话,我们前端的验证就会失效. 因 ...

  8. MVC中Model用法

    Model:对于MVC来说,Model可不简单只是实体,它应该叫视图模型,这是我自己的理解,即视图中的数据由Model来提供,当视图的数据需要改变时,我们不用打开aspx或ascx文件,只需要修改相应 ...

  9. 深入学习AngularJS中数据的双向绑定机制

    来自:http://www.jb51.net/article/80454.htm Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持 ...

随机推荐

  1. 常见的JavaScript函数

    JavaScript函数一共可分为5类:常规函数.数组函数.日期函数.数学函数和字符串函数. (1)常规函数(9个) alert函数:显示一个警告对话框,包括一个“确定”按钮. confirm函数:显 ...

  2. HttpModule

    HttpModule是如何工作的 当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,Htt ...

  3. Java 读取指定目录下的文件名和目录名

    需求:读取指定目录下的文件名和目录名 实现如下: package com.test.common.util; import java.io.File; public class ReadFile { ...

  4. Java之--Java基础知识

    一.软件基础知识 1.软件:一系列按特定顺序组织的计算机数据和指令的集合. 1)系统软件:DOS.windows.linux. 2)应用软件:QQ.扫雷等. 2.软件开发就是制作软件. 3.人与计算机 ...

  5. MemSQL Start&lbrack;c&rsqb;UP 2&period;0 - Round 1

    A. Eevee http://codeforces.com/contest/452/problem/A 字符串水题 #include<cstdio> #include<cstrin ...

  6. Selenium Web 自动化 - 项目持续集成

    Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备  1.1 安装git  1.2 安装jenkins  1.3 安装jenkins插件  1.4 jekins ...

  7. 在VMware中安装ubuntu

    如果想在自己设置它的属性,比如时区,语言支持之类的,在开机时按[enter], 否则就是默认的设置了,英文语言,而且还不好调.

  8. 让一个数组中存在N多个函数。让每个函数执行的 时候自动加1

    function test(){ var arr = [ ]; for (var i = 0; i < 10; i++) { (function(i){ arr[i] = function(){ ...

  9. redis 配置命令

    Redis:是一个key/v  型数据 是nosql的一种 CAP 理论: C:多个数据节点上的数据一致: A:用户发出请求后的有限时间范围内返回结果: P:network partition,网络发 ...

  10. DOM基础:table(表格)

    1. table元素的相关属性 tBodies 一个table可以有多个tBody tHead 一个table只有一个tHead tFoot  一个table只有一个tFoot rows 一个tabl ...