架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11395|回复: 2

[技巧] MVC 元模型元数据ViewData.ModelMetadata

[复制链接]
发表于 2017-6-28 21:12:49 | 显示全部楼层 |阅读模式

模型元数据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; }


021423543285832.png

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 元素




上一篇:[A]MySql.Data.MySqlClient.MySqlConnection 无法强制转换为 [B]MySql.Data.MySqlC...
下一篇:Uncaught TypeError: Cannot set property 'unobtrusive' of undefined
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-6-28 21:14:05 | 显示全部楼层
ModelMetadata



码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-12-1 16:53:12 | 显示全部楼层


ViewData获取属性代码:

ViewDataDictionary viewData2=new ViewDataDictionary(ViewData["Test"]);
viewData2.ModelMetadata.Properties;
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-26 23:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表