zoukankan      html  css  js  c++  java
  • MVC中Model元数据及绑定机制

           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的执行。

  • 相关阅读:
    告别08
    WinForm程序如何将子窗体嵌入到父窗体的Panel里
    几种排序算法
    接口的特征
    什么是重写
    C#异常处理
    什么是重载
    结构和类的区别
    Javascript的函数
    在ASP.NET中防止注入攻击
  • 原文地址:https://www.cnblogs.com/Vam8023/p/8456475.html
Copyright © 2011-2022 走看看