ASP.NET MVC Model元数据(一)

前言

在我初学的时候对Model元数据的概念很模糊,或者说是在大脑中没有它的一个模型,作为小白的我去看网上的一些文章还是两眼一黑啥都看不明白,然后我想退缩了,对的我退缩了准备跳过这个部分去学其他的,在这过程中干什么都没精神,就跟有一根刺插在心上一样,最终我还是回头了,现在来和大家分享一下什么是Model元数据,希望看完能对有的朋友有点帮助,大概的了解一下Model元数据到底是个什么玩意。

Model元数据

  • 什么是Model元数据?
  • 生成Model元数据的过程【一】
  • 生成Model元数据的过程【二】
  • ModelMetaData的定义、详解
  • Model元数据应用(常用特性应用)-1
  • Model元数据应用(自定义视图模板)-2
  • Model元数据应用(IMetadataAware接口使用)-3

什么是Model元数据?

前面耽搁了这么久,不废话了我们直接切入主题。

既然叫Model元数据就按照字面的意思得先要有Model吧(Model指的是视图模型)。那我们就先定义Model,请看代码1-1:

代码1-1

    public class Customer
{
public string CustomerID { get; set; }
public string Name { get; set; }
public DateTime RegistrationDate{ get; set; }
public Address Address { get; set; } }
public class Address
{
public string Name { get; set; }
}

很简单的示例Model,定义了我们就要展现它。

示例还是接着前面篇幅的示例,还是那句话没看过的朋友们也没事。在你自己项目中找到默认控制器所在,并且添加代码1-2到其中。

代码1-2

         public ViewResult Show(Customer customer)
{
return View(customer);
}

然后我们右键Show()方法,添加视图,并且勾选创建强类型视图,如图1-1所示。

图1-1

(这里跟大家说一下,如果怕手敲代码的失误可以在下拉框中选择你要定义到视图的模型类型,可能刚刚在VS环境中添加的类型还没显示出来,这时候点击取消,重新生成以下项目,然后再按照上面的步骤就可以找到你刚刚定义的类型了)

然后”添加”,添加代码1-3到视图中。

代码1-3

<p>@Html.EditorForModel()</p>

这时候还不能调试,需要在我们在项目中新建个文件夹,命名为Binders,然后在此文件夹下新建类文件命名为MyCustomBinderModel.cs,打开修改成如代码1-4。

代码1-4

using System.Web.Mvc;
using ConsoleApplication2; namespace MvcApplication.Binders
{
public class MyCustomBinderModel:IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
return new Customer()
{
CustomerID = "",
Name = "测试人员",
RegistrationDate = DateTime.Now,
Address = new Address()
{
Name = "天空之城"
}
};
}
}
}

(代码1-4中引用的命名空间ConsoleApplication2是Model所在部分,应该定义在项目的Models文件夹中的,这里大家要注意下不要学习我的这种做法。)

代码1-4是我们自己定义的模型绑定器,配置我们的调试环境所需,定义好了过后,还需要把自定义的模型绑定器添加到系统中,需要在Global.asax文件中的MvcApplication类型下的Application_Start()方法中添加代码1-5。

代码1-5

ModelBinders.Binders.Add(typeof(Customer), new Binders.MyCustomBinderModel());

这个时候我们来调试一下,结果如图1-2.

图1-2

看到这里了,有的朋友会问了说了这么多一点都没有讲到Model元数据啊?稍安勿躁,不要着急,看下图1-3.

图1-3

本来还想修改视图模型加上一些控制展示的特性,但是为了简洁明了给大家留个最基础的印象决定还是舍弃掉,当然了后面会有讲到的。

现在我们倒着讲,在视图中有句 @Html.EditorForModel()代码,还有一系列的方法都是视图辅助器方法,为什么叫这个名字呢,因为它帮助我们生成视图中所需的HTML代码,那么我们想过没有这些个视图辅助器方法是根据帮助我们生成HTML代码的呢?对了,就是根据Model元数据,现在就可以把Model元数据对象想象成封装着Customer类型中的各种展示信息,细心的朋友可能发现图1-2中少了点什么,Customer的Address属性没有展示出来,为什么呢?这些问题和Model元数据的生成过程以及它的对象结构在后续的篇章中会讲解到。

可能前篇铺垫了这么多后面就是一张图来说明什么是Model元数据有点坑,为了初学者没有考虑到大神们的感受,因为我知道我刚接触这部分知识的时候最想了解什么,所以望大神们勿喷。有了这个基础对后续文章的理解有很大的帮助,也会让大家在大脑中留个印象。

作者:金源

出处:http://www.cnblogs.com/jin-yuan/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

ASP.NET MVC Model元数据(一)的更多相关文章

  1. ASP.NET MVC Model元数据(五)

    ASP.NET MVC Model元数据(五) 前言 在上一篇中我们描述了应用于Model上面的各种用于显示控制的特性类,在本篇中将详细的介绍这些特性类的应用,虽然它们跟Model元数据的直接关系并不 ...

  2. ASP.NET MVC Model元数据(四)

    ASP.NET MVC Model元数据(四) 前言 前面的篇幅讲解了Model元数据生成的过程,并没有对Model元数据生成过程的内部和Model元数据结构的详细解释.看完本篇后将会对Model元数 ...

  3. ASP.NET MVC Model元数据(三)

    ASP.NET MVC Model元数据(三) 前言 在上篇中我们大概的讲解了Model元数据的生成过程,并没有对Model元数据本身和详细的生成过程有所描述,本篇将会对详细的生成过程进行讲解,并且会 ...

  4. ASP.NET MVC Model元数据(二)

    ASP.NET MVC Model元数据(二) 前言 在上篇中,给大家留个对Model元数据的印象,并没有对Model元数据有过多的讲解,而在本篇中也不会对Model元数据的本身来解释,而是针对于它的 ...

  5. ASP.NET MVC Model元数据

    ASP.NET MVC Model元数据(三) 前言 在上篇中我们大概的讲解了Model元数据的生成过程,并没有对Model元数据本身和详细的生成过程有所描述,本篇将会对详细的生成过程进行讲解,并且会 ...

  6. 【笔记】ASP.NET MVC Model元数据

    问题1:什么叫Model元数据? Model元数据,是针对数据类型的一种描述信息.由于复杂类型(或者说类型嵌套的存在,比如CustomerModel中有一个属性为复杂类型Address)的存在,因此M ...

  7. ASP.NET MVC Model绑定(一)

    ASP.NET MVC Model绑定(一) 前言 ModelMetadata系列的结束了,从本篇开始就进入Model绑定部分了,这个系列阅读过后你会对Model绑定有个比较清楚的了解, 本篇对于Mo ...

  8. ASP.NET MVC Model绑定

    ASP.NET MVC Model绑定(一) 前言 ModelMetadata系列的结束了,从本篇开始就进入Model绑定部分了,这个系列阅读过后你会对Model绑定有个比较清楚的了解, 本篇对于Mo ...

  9. ASP.NET MVC Model验证(四)

    ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...

随机推荐

  1. .net点选验证码实现思路分享

    哈哈好久没冒泡了,最进看见点选验证码有点意思,所以想自己写一个. 先上效果图 如果你被这个效果吸引了就请继续看下去. 贴代码前先说点思路: 1.要有一个汉字库,并按字形分类.(我在数据库里是安部首分类 ...

  2. 【.net 深呼吸】细说CodeDom(3):命名空间

    在上一篇文章中,老周介绍了表达式和语句,尽管老周没有把所有的内容都讲一遍,但相信大伙至少已经掌握基本用法.在本文中,咱们继续探讨 CodeDom 方面的奥秘,这一次咱们聊聊命名空间. 在开始之前,老周 ...

  3. less学习

    // 1.变量:颜色可做+- // from @nice-blue: #5B83AD; @light-blue: @nice-blue + #111; #header { color: @light- ...

  4. Travis CI用来持续集成你的项目

    这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...

  5. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  6. MIP开发常见问题解答

    校验相关 1. MIP 页面的 <a>链接校验报错,MIP 是强制 target="_blank" 吗? 如果想直接跳转MIP页,可以用mip-link 组件:MIP ...

  7. 谈谈DOMContentLoaded:Javascript中的domReady引入机制

    一.扯淡部分 回想当年,在摆脱写页面时js全靠从各种DEMO中copy出来然后东拼西凑的幽暗岁月之后,毅然决然地打算放弃这种处处“拿来主义”的不正之风,然后开启通往高大上的“前端攻城狮”的飞升之旅.想 ...

  8. vmware上网的方式

    vmware上网设置 vmware虚拟机上网设置 我的一些心得,如下: 如何使vmware虚拟机中的操作系统能够上网? 第一种情况: 主机使用PPPOE拨号上网 方法一:NAT方式 1.先关闭虚拟机中 ...

  9. 阿里云服务器上配置并使用: PHP + Redis + Mysql 从配置到使用

    (原创出处为本博客,http://www.cnblogs.com/linguanh/) 目录: 一,下载 二,解压 三,配置与启动 四,测试 Redis 五,配置 phpRedis 扩展 六,综合测试 ...

  10. arcgis api for js入门开发系列四地图查询(含源代码)

    备注:由于实现本篇功能的需求,修改了地图数据的dlsearch.mxd,然后更新了地图服务,需要的在文章最后有提供最新的mxd以及源代码下载的 上一篇实现了demo的地图工具栏,本篇新增地图查询功能, ...