mvc Model元数据【学习笔记】
页面中Html.Editorfor(model=>model.fieldname)这些方法,都是通过Model的元数据来生成html的,我们如果想控制最终生成的html,可以通过修改元数据来实现。
代表Model元数据的类名是ModelMetadata,获取一个Model类的元数据的方法如下:
public static ModelMetadata GetModelMetadata<TModel>(string propertyName)
{
ModelMetadataProvider provider = ModelMetadataProviders.Current;
ModelMetadata containerMetadata = new ModelMetadata(provider, null, () => null, typeof(TModel), null);
return containerMetadata.Properties.FirstOrDefault(m => m.PropertyName == propertyName);
}
ModelMetadata元数据类的TemplateHint可读写属性,代表生成的html模板(比如设置成"HiddenInput",就是一个hidden类型的<input/>),修改这个属性值的方法如下:
1、UIHintAttribute 特性
这个特性有两个只读属性PresentationLayer 、UIHint(在构造函数中赋值)。只要设置UIHint值,就等于设置了TemplateHint属性。
这个特性在相同的目标上可以应用多次,怎么确定选择使用哪个特性呢?选择步骤如下:首先查看特性的PresentationLayer属性如果等于"MVC"(应该是因为在MVC在的原因下,所以是"MVC"),就选择该特性,如果没有找到等于"MVC"的
就选择特性的PresentationLayer属性为空的特性,如果找到多个匹配的,就选择第一个找到的特性(反射获得的特性顺序和设置时的位置没有关系)
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple=true)]
public class UIHintAttribute : Attribute
{
//其他成员
public UIHintAttribute(string uiHint);
public UIHintAttribute(string uiHint, string presentationLayer);
public string PresentationLayer { get; }
public string UIHint { get; }
}
2、
HiddenInputAttribute特性,如果设置了这个特性,就会把UIHint属性的值设置为"HiddenInput"。如果同时设置UIHintAttribute和HiddenInputAttribute,则UIHintAttribute特性优先级高于HiddenInputAttribute
ScaffoldColumnAttribute特性,主要控制元数据中的ShowForDisplay 属性和ShowForEdit 属性。设置这个特性的scaffold属性,就相当于给元数据中的那两个属性赋值了。
元数据中的这两个属性到底有啥用呢?
public class ModelMetadata
{
//其他成员
public virtual bool ShowForDisplay { get; set; }
public virtual bool ShowForEdit { get; set; }
}
一个重要的接口IMetadataAware
实现IMetadataAware接口的特性类,可以获得一个ModelMetadata 类的实例,任意修改里面的属性。。。。。你懂得
public interface IMetadataAware
{
void OnMetadataCreated(ModelMetadata metadata);
}
DataTypeAttribute、DisplayFormatAttribute、EditableAttribute、ReadOnlyAttribute、DisplayAttribute、DisplayNameAttribute、RequiredAttribute 等等...
总结:mvc中定义了很多的控制元数据的特性,这些特性最终都是设置修改元数据的属性值。但是有很多的元数据属性,设置了没有效果。。。。难道这是用来给我们扩展用的未实现功能的属性标记吗?还是说是我测试的环境问题呢?我
的测试环境是 4.0 mvc3
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元数据的概念很模糊,或者说是在大脑中没有它的一个模型,作为小白的我去看网上的一些文章还是两眼一黑啥都看不明白,然后我想退 ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- ASP.NET MVC Model元数据(三)
ASP.NET MVC Model元数据(三) 前言 在上篇中我们大概的讲解了Model元数据的生成过程,并没有对Model元数据本身和详细的生成过程有所描述,本篇将会对详细的生成过程进行讲解,并且会 ...
- ASP.NET MVC Model元数据(二)
ASP.NET MVC Model元数据(二) 前言 在上篇中,给大家留个对Model元数据的印象,并没有对Model元数据有过多的讲解,而在本篇中也不会对Model元数据的本身来解释,而是针对于它的 ...
- MVC缓存OutPutCache学习笔记 (二) 缓存及时化VaryByCustom
<MVC缓存OutPutCache学习笔记 (一) 参数配置> 本篇来介绍如何使用 VaryByCustom参数来实现缓存的及时化.. 根据数据改变来及时使客户端缓存过期并更新.. 首先更 ...
- MVC缓存OutPutCache学习笔记 (一) 参数配置
OutPutCache 参数详解 Duration : 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的. Location : 缓存放置的位置; 该 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
随机推荐
- linux ssh scp无密码登录
一. 应用场景 假如你Linux Client是客户端, Server为服务器,用户名为user.现在要配置从Client到Server的无密码SSH登录或者无密码的scp拷贝. 例如客户端Clien ...
- UserControl调用Umbraco的Data Types
本篇文章介绍的是基于Umbraco CMS技术搭建的网站所使用的相关技术. 1. 需求: 网站前台功能有个表单提交,表单控件用到下拉列表(dropdownlist),需求是在dropdownlist ...
- 用JAX-WS在Tomcat中公布WebService
JDK中已经内置了Webservice公布,只是要用Tomcat等Webserver公布WebService,还须要用第三方Webservice框架. Axis2和CXF是眼下最流行的Webservi ...
- linux杂谈(十九):DNSserver的配置(二)
1.本机和外网的解析 之前讨论了DNS的正向解析和反向解析,但有的时候我们想让DNSserver对于server本机的解析和对于外网的解析是不同的.那就须要在主配置文件里对本机和外网进行不同的配 ...
- ContentProvider与ContentResolver使用
例如以下内容为从网络转载: 使用ContentProvider共享数据: 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就能够向其它应用共享其数据.虽然使用其它方 ...
- 5 Common Interview Mistakes that Could Cost You Your Dream Job (and How to Avoid Them)--ref
There have been many articles on our site on software testing interviews. That is because, we, as IT ...
- iOS 9 关键字的简单使用
前言: 在iOS 9 苹果推出了很多关键字, 目的其实很明确, 主要就是提高开发人员的效率, 有益于程序员之间的沟通与交流, 在开发中代码更加规范! 1. nullable 与 nonnull nul ...
- ajax大数据排队导出+进度条
描述 :我们现在有很多数据,分表存放,现在需要有精度条的导出.最后面有完整源码. 效果图:
- 在Silverlight中使用async/await
现在 async/await 大行其道,确实,有了 async/await ,异步编程真是简单多了,个人觉得 async/await 的出现,给开发者还来的方便,绝不亚于当年 linq 的出现. 但要 ...
- 使用SBT构建Scala项目
既然决定要在Scala上下功夫,那就要下的彻底.我们入乡随俗,学一下SBT.sbt使用ivy作为库管理工具.ivy默认把library repository建在user home下面. 安装SBT 在 ...