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. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. 平台之大势何人能挡? 带着你的Net飞奔吧!

    镇楼图: 跨平台系列: Linux基础 1.Linux基础学习 By dnt http://www.cnblogs.com/dunitian/p/4822807.html 环境配置 1.Hyper-v ...

  3. 十分钟介绍mobx与react

    原文地址:https://mobxjs.github.io/mobx/getting-started.html 写在前面:本人英语水平有限,主要是写给自己看的,若有哪位同学看到了有问题的地方,请为我指 ...

  4. .NET Core全新路线图

    .NET Core / ASP.NET Core 1 RTM发布两周后,社区也很积极,收到了非常多的反馈,上周五微软的scott Hunter 在dotnet团队官方博客上发布了.NET Core全新 ...

  5. C语言 · Torry的困惑(基本型)

    问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7--这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000--个质数的乘积是多少呢?他把这个问题告诉老师 ...

  6. 我为NET狂官方面试题-数据库篇

    求结果:select "1"? 查找包含"objs"的表?查找包含"o"的数据库? 求今天距离2002年有多少年,多少天? 请用一句SQL获 ...

  7. System.FormatException: GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。

    在NHibernate数据库查询中出现了这个错误,由于是数据库是mysql的,当定义的字段为char(36)的时候就会出现这个错误. [解决方法] 将char(36) 改成varchar(40)就行了 ...

  8. Android调用微信登陆、分享、支付

    前言:用了微信sdk各种痛苦,感觉比qq sdk调用麻烦多了,回调过于麻烦,还必须要在指定包名下的actvity进行回调,所以我在这里写一篇博客,有这个需求的朋友可以借鉴一下,以后自己别的项目有用到也 ...

  9. ASP.NET从零开始学习EF的增删改查

           ASP.NET从零开始学习EF的增删改查           最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...

  10. 深入研究Visual studio 2017 RC新特性

    在[Xamarin+Prism开发详解三:Visual studio 2017 RC初体验]中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很 ...