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提供的表示方式相同,可以与 ...
随机推荐
- MVC URL处理
需要web.config在system.webServer节点添加 <modules runAllManagedModulesForAllRequests="true"/ ...
- 苹果电脑出现 .DS_Store文件,删除不掉怎么处理?
今天早上打开电脑,发现桌面上出现一个.DS_Store文件.可是出现的莫名其妙,也就没在意,可是重复删除之后还是出现.后来查了一下网上的资料,才知道,昨天我加入git的时候,为了看见 .git这个隐藏 ...
- 即时通讯(IM)
即时通讯(IM)功能是APP的重要功能之一,而开发好移动IM却绝非易事.通常来说,IM技术选型至少要解决以下问题:1. 协议选型 2. IM服务器选型 3. 对协议和服务器做相应修改,通常来说直接拿个 ...
- HDU 5046 Airport ( Dancing Links 反复覆盖 )
今年上海网络赛的一道题目 , 跟 HDU 2295 如出一辙 . 就是距离的计算一个是欧几里得距离 , 一个是曼哈顿距离 学完DLX感觉这题好水 ,就是一个裸的反复覆盖 注意下别溢出即可了 #incl ...
- 正则表达式工具类,正则表达式封装,Java正则表达式
正则表达式工具类 正则表达式封装 Java正则表达式 >>>>>>>>>>>>>>>>>>& ...
- 我的插件のinput文本框实现宽度自适应
先来最后结果:DEMO 介绍一下如何让一个文本框的宽度能够随着文本框中的内容的宽度增长而增长,也就是能够实现宽度自适应效果. 代码实例如下: <!DOCTYPE html> <htm ...
- 一个library,相当于一个rootfolder
picLib.RootFolder.SubFolders 操作library的方式: SPList oList = web.Lists[ListName ...
- 监听EditText的变化
http://liangruijun.blog.51cto.com/3061169/729505 之前博客上的有关EditText的文章,只是介绍EditText的一些最基本的用法,这次来深入学习一下 ...
- C#当中的多线程_线程同步
第2章 线程同步 原来以为线程同步就是lock,monitor等呢,看了第二章真是大开眼界啊! 第一章中我们遇到了一个叫做竞争条件的问题.引起的原因是没有进行正确的线程同步.当一个线程在执行操作时候, ...
- SQL通过传递参数方式备份数据库.
存储过程的SQL代码: ALTER PROCEDURE USP_DBBackup ), --存储目录. ) --存储数据库名. AS SET NOCOUNT ON ) select @name = r ...