模型元数据ModelMetaData是MVC中很重要的概念,它包括但不仅限于 模型的类型,模型包含了哪些属性,属性都是什么类型的,属性上都有什么特性。
ASP.NET MVC3.0 提供了默认的模型元数据 DataAnnotationsModelMetadata 继承自ModelMetadata(另外系统提供了默认的模型元数据提供器DataAnnotationsModelMetadataProvider)
public class DataAnnotationsModelMetadata : ModelMetadata
它的构造函数如下
public DataAnnotationsModelMetadata(DataAnnotationsModelMetadataProvider provider, Type containerType, Func modelAccessor, Type modelType, string propertyName, DisplayColumnAttribute displayColumnAttribute);
DataAnnotationsModelMetadata类有常用的几个属性
DisplayName 显示名称,DisplayFormatString格式字符串
TemplateHint 获取一个值选择使用哪个模版
对于DisplayName ,LabelFor<TModel, TValue> 方法中使用此属性来生成标签文本. 意思就是一旦我们的model上有定义了DispalyName特性,那么view中使用html.editForModel()方法就会自动为model的这个属性显示出label标签" <label for="username">名称</label></
[Display( Name="名称",Order=2)] //order属性改变在html页面中的排列顺序
public string username { get; set; }
html源代码:
属性username上用的Display特性就是System.ComponentModel.DataAnnotations.DisplayAttribute类提供一个通用特性,使您可以为实体分部类的类型和成员指定可本地化的字符串
另外还有一些特性来自System.Web.MVC 和 System.ComponentModel.DataAnnotations,名称凡类似 XXXXAttribute的都为特性类,都有特定的使用范围,有的限制模型属性,有的限制Contrller,有的限制Action等等。
下面列举了这2个命名空间下,内置的而且常用的特性类
1)System.Web.MVC空间下的
AcceptVerbsAttribute,ActionFilterAttribute,ActionNameAttribute,AsyncTimeoutAttribute,AuthorizeAttribute,BindAttribute,
HiddenInputAttribute
ActionFilterAttribute 表示所有操作-筛选器特性的基类
HttpDeleteAttribute 类,表示一个特性,该特性用于限制操作方法,以便该方法仅处理 HTTP DELETE 请求
HttpGetAttribute,HttpPostAttribute 表示特性,用于限制操作方法,仅限处理PUT请求
HttpPutAttribute 表示一个特性,该特性用于限制操作方法,以便该方法仅处理 HTTP PUT 请求。
例:ActionNameAttribute 指定action的实际actionname,用法如下
[ActionName()]
public ActionResult Index()
例:HiddenInputAttribute类,表示一个特性,该特性用于指示是否应将属性值或字段值呈现为隐藏 input 元素 |