ASP.NET MVC Model元数据(一)
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元数据(一)的更多相关文章
- ASP.NET MVC Model元数据(五)
ASP.NET MVC Model元数据(五) 前言 在上一篇中我们描述了应用于Model上面的各种用于显示控制的特性类,在本篇中将详细的介绍这些特性类的应用,虽然它们跟Model元数据的直接关系并不 ...
- ASP.NET MVC Model元数据(四)
ASP.NET MVC Model元数据(四) 前言 前面的篇幅讲解了Model元数据生成的过程,并没有对Model元数据生成过程的内部和Model元数据结构的详细解释.看完本篇后将会对Model元数 ...
- ASP.NET MVC Model元数据(三)
ASP.NET MVC Model元数据(三) 前言 在上篇中我们大概的讲解了Model元数据的生成过程,并没有对Model元数据本身和详细的生成过程有所描述,本篇将会对详细的生成过程进行讲解,并且会 ...
- ASP.NET MVC Model元数据(二)
ASP.NET MVC Model元数据(二) 前言 在上篇中,给大家留个对Model元数据的印象,并没有对Model元数据有过多的讲解,而在本篇中也不会对Model元数据的本身来解释,而是针对于它的 ...
- ASP.NET MVC Model元数据
ASP.NET MVC Model元数据(三) 前言 在上篇中我们大概的讲解了Model元数据的生成过程,并没有对Model元数据本身和详细的生成过程有所描述,本篇将会对详细的生成过程进行讲解,并且会 ...
- 【笔记】ASP.NET MVC Model元数据
问题1:什么叫Model元数据? Model元数据,是针对数据类型的一种描述信息.由于复杂类型(或者说类型嵌套的存在,比如CustomerModel中有一个属性为复杂类型Address)的存在,因此M ...
- ASP.NET MVC Model绑定(一)
ASP.NET MVC Model绑定(一) 前言 ModelMetadata系列的结束了,从本篇开始就进入Model绑定部分了,这个系列阅读过后你会对Model绑定有个比较清楚的了解, 本篇对于Mo ...
- ASP.NET MVC Model绑定
ASP.NET MVC Model绑定(一) 前言 ModelMetadata系列的结束了,从本篇开始就进入Model绑定部分了,这个系列阅读过后你会对Model绑定有个比较清楚的了解, 本篇对于Mo ...
- ASP.NET MVC Model验证(四)
ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...
随机推荐
- 使用C#处理基于比特流的数据
使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...
- SQL Server 致程序员(容易忽略的错误)
标签:SQL SERVER/MSSQL/DBA/T-SQL好习惯/数据库/需要注意的地方/程序员/容易犯的错误/遇到的问题 概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见 ...
- Java数据库连接技术——JDBC
大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...
- TypeScript Vs2013 下提示Can not compile modules unless '--module' flag is provided
VS在开发TypeScript程序时候,如果import了模块有的时候会有如下提示: 这种情况下,只需要对当前TypeScript项目生成设置为AMD规范即可!
- AFNetworking 3.0 源码解读 总结(干货)(下)
承接上一篇AFNetworking 3.0 源码解读 总结(干货)(上) 21.网络服务类型NSURLRequestNetworkServiceType 示例代码: typedef NS_ENUM(N ...
- JavaScript基础知识总结(二)
JavaScript语法 二.数据类型 程序把这些量.值分为几大类,每一类分别叫什么名称,有什么特点,就叫数据类型. 1.字符串(string) 字符串由零个或多个字符构成,字符包括字母,数字,标点符 ...
- 分享两种实现Winform程序的多语言支持的解决方案
因公司业务需要,需要将原有的ERP系统加上支持繁体语言,但不能改变原有的编码方式,即:普通程序员感受不到编码有什么不同.经过我与几个同事的多番沟通,确定了以下两种方案: 方案一:在窗体基类中每次加载并 ...
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- [数据结构]——堆(Heap)、堆排序和TopK
堆(heap),是一种特殊的数据结构.之所以特殊,因为堆的形象化是一个棵完全二叉树,并且满足任意节点始终不大于(或者不小于)左右子节点(有别于二叉搜索树Binary Search Tree).其中,前 ...
- codevs 3289 花匠
题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...