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写一些自定义的客户端验证。

服务端的模型验证不用我们操心,这两个特性会在验证时正确触发的。

 

使用这个技巧,你还可以实现一些自定义的特性,以控制客户端的页面功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有手就行3——持续集成环境—maven、tomcat、安装和配置

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 有手就行3——持续集成环境—maven、tomcat、安装 持续集成环境**(5)-Maven****安装和配置** 持续集成环境(6)-Tomcat安装…

隐藏Content-Location标头带的内部IP地址的执行语句以及其可能会带来的问题

用IIS发布的系统&#xff0c;利用各种检测工具&#xff0c;可以获取到页面的请求头的信息&#xff0c;里面会带有服务器IP等保密信息。 为了避免服务器IP地址等这种信息别的工具检测到&#xff0c;导致安全隐患。可以在CMD中执行以下语句&#xff1a; cscript c:\\inetpub\admi…

unity获取ugui上鼠标位置

public class GetMousePos : MonoBehaviour {public Canvas canvas;//画布private RectTransform rectTransform;//坐标void Start(){canvas GameObject.Find("Canvas").GetComponent<Canvas>();rectTransform canvas.transform as RectTransform; //也可以写…

netty框架

Netty 提供异步的、事件驱动的网络应用程序框架和工具&#xff0c;用以快速开发高性能、高可靠性的网络服务器和客户端程序。Netty是一个NIO客户端 服务端框架。允许快速简单的开发网络应用程序。例如&#xff1a;服务端和客户端之间的协议。它最棒的地方在于简化了网络编程规范…

stm32中stm32f10x_type.h(固件3.0以前)、stm32f10x.h(固件3.0以后)、stdint.h文件的关系

在stm32f10x的3.5固件库中stm32f10x.h有以下代码&#xff08;第478行开始&#xff09;&#xff1a; /*** }*/#include "core_cm3.h" #include "system_stm32f10x.h" #include <stdint.h>/** addtogroup Exported_types* {*/ /*!< STM32F10x Stan…

.netcore基础知识(一)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 先来说说web服务器 先来一张图 一个典型的进程外托管模型 我们先看kestrel这一部分 我们在它前面放了一个方向代理服务器n…

内存墙,多核CPU的终结者?

原文地址&#xff1a;http://www.ed-china.com/ART_8800045174_400004_500008_OT_8f4eb612.HTM 多核处理器是当今计算领域的主导&#xff0c;而多核芯片则遍布从苹果的iPad到富士通K超级计算机的各种平台。2005年&#xff0c;由于功耗将单核CPU的时钟速度限制在3GHz&#xff0c…

BZOJ 1791 岛屿(环套树+单调队列DP)

题目实际上是求环套树森林中每个环套树的直径。 对于环套树的直径&#xff0c;可以先找到这个环套树上面的环。然后把环上的每一点都到达的外向树上的最远距离作为这个点的权值。 那么直径一定就是从环上的某个点开始&#xff0c;某个点结束的。 把环拆成链&#xff0c;定义dp[…

什么是SAS

什么是SAS&#xff1f;简单的说&#xff0c;SAS是一种磁盘连接技术。它综合了现有并行SCSI和串行连接技术&#xff08;光纤通道、SSA、IEEE1394及InfiniBand等&#xff09;的优势&#xff0c;以串行通讯为协议基础架构&#xff0c;采用SCSI-3扩展指令集并兼容SATA设备&#xff…

C语言编程规范--常用缩写词

常用缩写词 缩 写 全 称 a addr address admin / adm administrator app application arg argument asm assemble asyn asynchronization avg average b bg background bk back bmp bitmap brk break btn button buf buffer c calc calculate ch…

netty系列之:JVM中的Reference count原来netty中也有

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 目录* 简介 ByteBuf和ReferenceCountedByteBuf的基本使用ByteBuf的回收ByteBuf的衍生方法ChannelHandler中的引用计数内存泄…

hdu区域赛在线热身赛 暨 第十二场组队赛

题目编号&#xff1a;hdu 4257~4266 (对应比赛题号1001~1010) 这是我们第十二场组队赛&#xff0c;在今天中午进行。 比赛刚开始&#xff0c;依然是由我的队友读题。还没看几题&#xff0c;就发现了好多题judge时长高达20秒&#xff0c;这真的有点给我们心理造成压力。不过&…

powerdesign相关

1.安装程序和汉化放百度云了 2.打印错误处理 http://jingyan.baidu.com/article/c45ad29cd84e4b051753e2c3.html 3.导出sql http://jingyan.baidu.com/article/7082dc1c48960ee40a89bd38.html 4.name和comment同步 http://blog.csdn.net/steveguoshao/article/details/16940347…

游戏名词

BUFF,DEBUFF: 增益状态&#xff0c;包括自己或者队友施加的&#xff0c;例如骑士的祝福&#xff0c;牧师的耐力精神&#xff0c;小德的爪子DEBUFF就是减益状态&#xff0c;例如你PK的时候法师的寒冰箭减速&#xff0c;盗贼的毒药&#xff0c;SS的腐蚀等等NPC&#xff1a; NPC就…

C语言编程规范--代码注释

目录 1、什么是Doxygen?. 3 2、撰写正确格式的批注... 4 2.1常用指令介绍... 4 2.2简述与详述的方式... 6 2.3文件头注释... 6 2.4版权注释... 6 2.5模块定义&#xff08;单独显示一页&#xff09;... 7 2.6分组定义&#xff08;在一页内分组显示&#xff09;... 8 2.7变量、宏…

Spring系列15:Environment抽象

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 本文内容 Environment抽象的2个重要概念Profile 的使用PropertySource 的使用 Environment抽象的2个重要概念 Environme…

U-Mail邮件服务系统任意文件上传+执行漏洞(runtime缺陷与验证绕过)

http://www.wooyun.org/bugs/wooyun-2010-061859转载于:https://www.cnblogs.com/hookjoy/p/4068326.html

Source Insight使用技巧

一、Source Insight实用技巧&#xff1a; Source Insight(下文的SI指的也是它)就是这样的一个东西&#xff1a;   Windows下开发人员的至爱&#xff0c;功能强大&#xff0c;界面友好。支持语法高亮、符号跳转&#xff0c;还支持函数调用关系图显示。这是一个专业的编程环境&…

剑指offer-翻转单词顺序列

剑指offer-翻转单词顺序列 题目描述 牛客最近来了一个新员工Fish&#xff0c;每天早晨总是会拿着一本英文杂志&#xff0c;写些句子在本子上。同事Cat对Fish写的内容颇感兴趣&#xff0c;有一天他向Fish借来翻看&#xff0c;但却读不懂它的意思。例如&#xff0c;“student. a …

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(上)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 提示&#xff1a;本系列笔记全部存在于 Github&#xff0c; 可以直接在 Github 查看全部笔记 持续部署概述 持续部署是能…