在我初学的时候对Model元数据的概念很模糊,或者说是在大脑中没有它的一个模型,做为小白的我去看网上的一些文章仍是两眼一黑啥都看不明白,而后我想退缩了,对的我退缩了准备跳过这个部分去学其余的,在这过程当中干什么都没精神,就跟有一根刺插在心上同样,最终我仍是回头了,如今来和你们分享一下什么是Model元数据,但愿看完能对有的朋友有点帮助,大概的了解一下Model元数据究竟是个什么玩意。html
什么是Model元数据?c#
生成Model元数据的过程【一】ide
生成Model元数据的过程【二】学习
ModelMetaData的定义、详解测试
Model元数据应用(经常使用特性应用)-1spa
Model元数据应用(自定义视图模板)-2调试
Model元数据应用(IMetadataAware接口使用)-3htm
前面耽搁了这么久,不废话了咱们直接切入主题。对象
既然叫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
1 public ViewResult Show(Customer customer) 2 { 3 return View(customer); 4 }
而后咱们右键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 = "010", 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元数据有点坑,为了初学者没有考虑到大神们的感觉,由于我知道我刚接触这部分知识的时候最想了解什么,因此望大神们勿喷。有了这个基础对后续文章的理解有很大的帮助,也会让你们在大脑中留个印象。