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的元数据信息。

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.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. vue v-for循环的用法

    1.v-for循环普通数组 ①创建vue对象 ② 循环数据 结果: 2.v-for循环对象数组 ① 创建vue实例对象 ② 循环对象数组 结果: 3.v-for循环对象 ①创建vue对象实例 ②循环对 ...

  2. java实现点击图片文字验证码

    https://www.cnblogs.com/shihaiming/p/7657115.html

  3. NOI2017总结

    时光剥离你我像一袭华美衣衫 却要被追悔爬满 退役之战,去得匆匆,看得蒙蒙. 第三次全国赛,曾经的APIO初二选手也走到了时间的尽头. 第一次走向全国舞台的激动与忐忑,第一次在大赛中失利的沮丧与绝望,第 ...

  4. C# 显示纯文本对齐封装(控制显示字体长度)

    坑: 用户在写多行的纯文本上来了一个对齐的表格..如下: 原因:不同的字体下,中文,英文大写,英文小写,字符,尤其是空格..字体占用的长度是不一样的,然后显示出来就是乱的.. 然而客户要求在不同的字体 ...

  5. 传入两坐标点,利用div+css画线

    上样式生成函数代码 lineStyle (x1, y1, x2, y2, lineWidth = 4, color = 'black') { let rectX = x1 < x2 ? x1 : ...

  6. KMP模板实现

    看了出题知识点才发现自己连KMP都没有好好的理解,甚至一共就打过一次板子=-= 于是照着之前的课件学了一学...发现没怎么弄懂qwq 我太弱啦! 找了一篇自认为全网最好的介绍 觉得写得很棒 字符串匹配 ...

  7. :nth-child() 与 :nth-of-type(n)的区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 关于A2C算法

    https://github.com/sweetice/Deep-reinforcement-learning-with-pytorch/blob/master/Char4%20A2C/A2C.py ...

  9. 201771010118 马昕璐《面向对象程序设计java》第十二周学习总结

    第一部分:理论知识学习部分 用户界面:用户与计算机系统(各种程序)交互的接口 图形用户界面:以图形方式呈现的用户界面 AET:Java 的抽象窗口工具箱包含在java.awt包中,它提供了许多用来设计 ...

  10. [LeetCode] Reordered Power of 2 重新排序为2的倍数

    Starting with a positive integer N, we reorder the digits in any order (including the original order ...