IMetadataAware接口的特性定制Model元数据

第一步创建元数据类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Reflection;
 5 using System.Web;
 6 using System.Web.Mvc;
 7
 8 namespace MvcApplication19
 9 {
10     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property)]
11     public class DisplayTextAttribute : Attribute, IMetadataAware
12     {
13         private static Type staticResourceType;
14         public string DisplayName { get; set; }
15         public Type ResourceType { get; set; }
16
17         public DisplayTextAttribute()
18         {
19             this.ResourceType = staticResourceType;
20         }
21
22         public void OnMetadataCreated(ModelMetadata metadata)
23         {
24             this.DisplayName = this.DisplayName ?? (metadata.PropertyName ?? metadata.ModelType.Name);
25             if (null == this.ResourceType)
26             {
27                 metadata.DisplayName = this.DisplayName;
28                 return;
29             }
30             PropertyInfo property = this.ResourceType.GetProperty(this.DisplayName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
31             metadata.DisplayName = property.GetValue(null, null).ToString();
32         }
33
34         public static void SetResourceType(Type resourceType)
35         {
36             staticResourceType = resourceType;
37         }
38     }
39 }

第二步创建Person类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5
 6 namespace MvcApplication19.Models
 7 {
 8     public class Person
 9     {
10         [DisplayText]
11         public string  Name { get; set; }
12
13          [DisplayText]
14         public string Sex { get; set; }
15
16          [DisplayText]
17         public string BirthDay { get; set; }
18          [DisplayText]
19         public string Dep { get; set; }
20     }
21 }

时间: 2024-08-09 01:55:29

IMetadataAware接口的特性定制Model元数据的相关文章

ASP.NET MVC Model元数据及其定制: Model元数据的定制(原版没分段,分开自己看)

转自:http://www.cnblogs.com/artech/archive/2012/04/12/model-metadata-02.html 在<上篇>我们已经提到过了,Model元数据的定制是通过在作为Model的数据类型极其属性成员上应用相应的特性来实现,这些用于声明式元数据定义的特性大都定义在System.ComponentModel.DataAnnotations.dll程序集中,程序集的名称同时也是对应的命名空间名称,所以我们可以它们为数据注解特性(Data Annotati

MVC之Model元数据

Contronoller激活之后,ASP.NET MVC会根据当前请求上下文得到目标Action的名称,然后解析出对应的方法并执行之. 在整个Action方法的执行过程中,Model元数据的解析是一个非常重要的环节.ASP.NET MVC中的Model实际上View Model,表示最终绑定到View上的数据,而Model元数据描述了Model的数据结构,以及Model的每个数据成员的一些特性. 正是有了Model元数据的存在,才使模板化HTML的呈现机制成为可能.此外,Model元数据支撑了A

ASP.NET MVC Model元数据(五)

ASP.NET MVC Model元数据(五) 前言 在上一篇中我们描述了应用于Model上面的各种用于显示控制的特性类,在本篇中将详细的介绍这些特性类的应用,虽然它们跟Model元数据的直接关系并不大,但是我们可以用它们在编码阶段控制运行时的显示. Model元数据 什么是Model元数据? 生成Model元数据的过程[一] 生成Model元数据的过程[二] ModelMetaData的定义.详解 Model元数据应用(常用特性应用)-1 Model元数据应用(自定义视图模板)-2 Model

Model元数据解析

Model 元数据是针对数据类型的一种描述信息,主要用于控制数据类型本身及其成员属性在界面上的呈现方式,同时也为Model 绑定和验证提供必不可少的元数据信息.一个复杂数据类型通过属性的方式定义了一系列的数据成员,而Model 元数据不仅仅是数据类型本身的描述,对数据成员的描述也包含其中,所以Model 元数据具有一个层次化结构. AdditionalMetadataAttribute定义的值放在元数据的AdditionalValues中.实现接口IMetadat aAware ModelMet

asp.net Model元数据学习二

3.IMetadataAware接口 用于设置Model元数据自定义属性的AdditionalMetadataAttribute特性实现了一个非常重要的IMetadataAware接口,实现这个接口的特性可以对最终生成的Model元数据进行自由定制.这个接口只有唯一的方法,作为参数的ModelMetadata对象表示可以被自由定制的Model元数据.当表示Model元数据的ModelMetadata对象被创建出来后,前篇帖子里记的一系列注解特性会被提取出来对其进行初始化. public inte

mvc Model元数据【学习笔记】

页面中Html.Editorfor(model=>model.fieldname)这些方法,都是通过Model的元数据来生成html的,我们如果想控制最终生成的html,可以通过修改元数据来实现. 代表Model元数据的类名是ModelMetadata,获取一个Model类的元数据的方法如下: public static ModelMetadata GetModelMetadata<TModel>(string propertyName) {     ModelMetadataProvi

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

问题1:什么叫Model元数据? Model元数据,是针对数据类型的一种描述信息.由于复杂类型(或者说类型嵌套的存在,比如CustomerModel中有一个属性为复杂类型Address)的存在,因此Model 元数据为树形结构: 1 //namespace:System.Web.Mvc 2 public class ModelMetadata 3 { 4 //其它成员 5 6 //当前模型类型 7 //倘若用数据库中树形结构解释,这个属性相当于Id 8 public Type ModelType

Model元数据提供机制小结

在最开始先我得说说我看这部分的情况,最开始被各种ModelMetadata和各种ModelMetadataProvider给搞晕了,就几页书花了我好大的精力去看,直到后来看了一幅类图,细细看各个类之间的关系,重新阅读这部分的内容,我才算有所了解,有所收获,这个估计是以后看书的方法,看代码的方法,先了解结构,才不会被庞大的类库所混乱.那么我也首先把类图列出来,这幅图依据我个人喜好位置上作了调整,与书上的不同. 整张图左边是ModelMetadata部分的,右边才是元数据的提供者Provider,虽

ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上

原文:ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上 ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model类型及其属性上的ValidationAttribute才有效.如果我们能够将ValidationAttribute特性直接应用到参数上,我们不但可以实现简单类型(比如int.double等)数据的Model验证,还能够实现“一个Model类型,多种验证规则”,本篇文章将为你提供相关的解决方案(源代码