MVC中获取模型属性的Range和StringLength验证特性设置
MVC中的客户端及服务端模型验证信息都以ModelMetadata类型作为承载,在获得属性的ModelMetadata之后(还不知道怎么获取ModelMetadata的童鞋请自行恶补),我们可以轻松得到一些我们在模型中定义的特性,比如显示名称、是否只读、是否必须、注释、数据类型等,但是并不包括Range和StringLength这两个需要验证的特性,我把ModelMetadata对象翻个底朝天也没找到设置的值。
于是乎,只能通过反射来获取特性的定义信息了,以下代码能够获取到该属性定义的所有特性:
var attrs = metadata.ContainerType.GetProperty(metadata.PropertyName).CustomAttributes;
然后我们遍历之,寻找我们要的类型,这里以Range为例:
foreach (var f in attrs){if (f.AttributeType == typeof(RangeAttribute) && f.ConstructorArguments[0].ArgumentType != typeof(Type)){//TODO:对其取值 }}
代码中首先判断类型是否一致,接着判断第一个构造参数是否不为Type类型(Range特性有三个构造函数,其中第一个参数为Type类型的max和min值可以是任何类型,在这里我们不需处理这个构造函数的数据,只对另外两种传输int或double的构造函数感兴趣)。
然后就可以取值了:
double Min = ((IConvertible)f.ConstructorArguments[0].Value).ToDouble(null); double Max = ((IConvertible)f.ConstructorArguments[1].Value).ToDouble(null);
这里我们需要double类型的值,所以不管传入的是int还是double类型参数,统一使用转换的方式转换为double。
这样我们就可以在发往客户端页面中进行基本的限制了:
<input type="number" name="points" min="@Min" max="@Max" />
同理可以取来StringLength的信息用来限制文本输入框的可输入字符长度:
<input maxlength="@Length">
还可以结合JS写一些自定义的客户端验证。
服务端的模型验证不用我们操心,这两个特性会在验证时正确触发的。
使用这个技巧,你还可以实现一些自定义的特性,以控制客户端的页面功能。
转载于:https://www.cnblogs.com/SkyD/p/4053458.html
MVC中获取模型属性的Range和StringLength验证特性设置相关推荐
- 如何在自定义指令中获取评估属性
本文翻译自:How to get evaluated attributes inside a custom directive I'm trying to get an evaluated attri ...
- Spring MVC中获取当前项目的路径
Spring MVC中获取当前项目的路径 在web.xml中加入以下内容 <!--获取项目路径--><context-param><param-name>webAp ...
- 在ASP.NET MVC 中获取当前URL、controller、action
在ASP.NET MVC 中获取当前URL.controller.action URL的获取很简单,ASP.NET通用: [1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) stri ...
- Spring mvc 中处理模型数据 ModelAndView
Spring mvc 中处理模型数据 ModelAndView 原文: http://blog.csdn.net/jingyuan_/article/details/9625125 将模型数据暴露给 ...
- spring MVC中获取request和response
spring MVC中获取request和response: Java代码 HttpServletRequest request = ((ServletRequestAttributes) Req ...
- pytorch中获取模型参数
原文链接:pytorch中获取模型参数:state_dict和parameters两个方法的差异比较_造未来-CSDN博客 一.本文的模型案例 代码如下: import torch import to ...
- 如何在Java中获取系统属性?
The System class in Java maintains a set of properties. These properties are stored in the form of k ...
- 不知道如何使用Hermit从Java本体中获取对象属性
我正在尝试从一个类中获取一个对象属性,特别是:我试图了解一个类何时是其他类的一部分(可以在屏幕截图中看到所使用的结构). 我已经尝试在OWLClass对象(对象为" e")上使用O ...
- ASP.NET MVC中的模型装配 封装方法 非常好用
下面说一下 我们知道在asp.net mvc中 视图可以绑定一个实体模型 然后我们三层架构中也有一个model模型 但是这两个很多时候却是不一样的对象来的 就拿微软的官方mvc例子来说明 微软的视图实 ...
最新文章
- python 画图 内存-python来做专项测试-内存测试
- 根据字段的不同内容分类汇总 - 球队的胜负次数统计
- 自由自在讲述小资与冰淇淋的美丽生活
- C#中怎样跨窗体调用事件-从事件订阅实例入手
- MongoDB BI Connector 实战指南
- Spring boot 之 动态的获取不同的实现类
- 地平线后端开发实习面经
- 与中石油分享SOA成功实践
- Memcache 提高缓存命中率
- iOS开发拓展篇—UIDynamic(捕捉行为)
- [UE4]暂停游戏、退出游戏、游戏输入模式
- BIOS、BootLoader、uboot对比
- 一文搞懂 Flink 的 Exactly Once 和 At Least Once
- java-如何反编译
- python飞机大战游戏素材_python实现飞机大战小游戏
- C# 格式化json移除空值,参数按照第一个字符的键值 ASCII 码递增排序(SM2签名)
- Alex Smith: An NFL quarterback on overcoming setbacks and self-doubt
- presto字符串转日期
- linux公社_又一个Linux发行版宣告死亡!曾经是最好的桌面版BSD操作系统
- 微信恋爱话术表白漫画脸头像制作生成小程序源码
热门文章
- ⑨③-不能浪费拥有的年轻资本
- 数据库开发基本操作-安装Sql Server 2005出现“性能监视器计数器要求”错误解决方法...
- 假装不知道有尽头(博弈论的诡计)
- 强制退出WinForm程序之Application.Exit和Environment.Eixt
- 入行AI,你需要一本Python机器学习入门
- laravel5.4 关于数据填充的知识
- JVM指令详解(上)
- 常用英文标点符号的使用
- 1578: [Usaco2009 Feb]Stock Market 股票市场
- 方案里最常用的集群拓扑图(包含:多机集群、负载均衡、双机)