当前位置: 首页 > 编程日记 > 正文

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

相关文章:

以安装PyTorch为例说明Anaconda在Windows/Linux上的使用

在Windows10上配置完MXNet 1.3.0后&#xff0c;再配置PyTorch 1.0时&#xff0c;发现两者需要依赖的NumPy版本不一致&#xff0c;之前是通过pip安装NumPy&#xff0c;根据pip的版本不同&#xff0c;会安装不同版本的NumPy&#xff0c;使用起来很不方便&#xff0c;而且MXNet和P…

常用 SQL介绍

创建表 /*创建数据表CREATE TABLE 表名 (字段名 类型(INTEGER, REAL, TEXT, BLOB)NOT NULL 不允许为空PRIMARY KEY 主键AUTOINCREMENT 自增长,字段名2 类型,...)注意&#xff1a;在开发中&#xff0c;如果是从 Navicat 粘贴的 SQL&#xff0c;需要自己添加一个指令IF NO…

AttoNets,一种新型的更快、更高效边缘计算神经网络

作者 | Alexander Wong, Zhong Qiu Lin, and Brendan Chwyl 译者 | Rachel 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;尽管机器学习已经在很多复杂的任务中取得了进展&#xff0c;但现有模型仍然面临许多边缘计算实践的困难&#xff0c;这些边缘计算场景包括移…

Appro DM8127 IPNC 挂载NFS遇到的问题及解决

对于Appro DM8127 IPNC&#xff0c;默认的启动方式是NAND is used for booting kernel and NAND is used as root filesystem 为了调试应用程序方便&#xff0c;通常使用挂载NFS作为 root filesystem 但是如果直接采用ti文档中所给的方法修改文件系统挂载方式&#xff08;将启动…

提高C++性能的编程技术笔记:设计优化/可扩展性/系统体系结构相关+测试代码

1. 设计优化 我们可以粗略地将性能优化分为两种类型&#xff1a;编码优化和设计优化。编码优化定义为不需要完整理解要解决的问题或者应用程序的执行流程就能实施的优化。通过定义看出&#xff0c;编码优化用于局部代码&#xff0c;同时该过程不牵涉周围的代码。除了这些容易实…

ICLR 2020被爆半数审稿人无相关领域经验,同行评审制度在垮塌?

作者 | 若名出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;根据维基百科&#xff0c;同行评议&#xff08;peer review)&#xff0c;是指由一个或多个具有与作品生产者具有相似能力的人员&#xff08;同行&#xff09;对作品进行的评估活动。同行评审方法用于维持质…

Swift 中使用 SQLite——批量更新(事务处理)

本文是Swift 中使用 SQLite系列的收官之作&#xff0c;介绍一下在数据库中的批量更新。 事务 在准备做大规模数据操作前&#xff0c;首先开启一个事务&#xff0c;保存操作前的数据库的状态开始数据操作如果数据操作成功&#xff0c;提交事务&#xff0c;让数据库更新到数据操…

网络管理常用命令之二 - Ipconfig 命令详解(图文)

2、Ipconfig 命令...不带参数.../all 参数.../release 和 /realease6 参数.../Renew 和 /Renew6 参数.../flushdns 参数.../displaydns 参数2、Ipconfig 命令 ipconfig命令也是使用率非常高的一个命令&#xff0c;可用于显示系统的TCP/IP网络配置值&#xff0c;并刷新动态主…

Swift 中使用 SQLite——查询数据

本文主要介绍如何查询 SQLite 结果集&#xff0c;以及封装 SQLite 的操作方法。 准备测试代码 /// 从数据库中加载 person 数组 class func persons() -> [Person]? {// 1. 准备 SQLlet sql "SELECT id, name, age, height FROM T_Person;"// 2. 访问数据库// …

提高C++性能的编程技术笔记:总结

《提高C性能的编程技术》这本书是2011年出版的&#xff0c;书中有些内容的介绍可能已经过时&#xff0c;已不再适用于现在的C编程中&#xff0c;但大部分内容还是很有参考意义的。 这里是基于之前所有笔记的简单总结&#xff0c;笔记列表如下&#xff1a; 跟踪实例&#xff1…

13岁小孩都跟我抢Python了,完了!

以下来自一位程序员母亲和工作人员的对话。程序员妈妈&#xff1a;您好&#xff0c;可以帮我推荐一本适合我家小孩看的编程书籍吗&#xff1f;兔子&#xff1a;可以的呀&#xff0c;《Scratch从入门到精通》&#xff0c;这本书适合小孩学习&#xff0c;您可以先看一下哦~程序员…

Windows Mobile 6.0 SDK和中文模拟器下载

【转】 Windows Mobile 6.0 SDK和中文模拟器下载 Windows Mobile 6.5 模拟器2010年12月06日 星期一 07:48转载自 zhangyanle86终于编辑 zhangyanle86Windows Mobile 6.0 SDK和中文模拟器下载 SDK 6.0下载页面&#xff1a;http://www.microsoft.com/downloads/details.aspx?fam…

wxPython:Python首选的GUI库 | CSDN博文精选

作者 | 天元浪子来源 | CSDN博客文章目录概述窗口程序的基本框架事件和事件驱动菜单栏/工具栏/状态栏动态布局AUI布局DC绘图定时器和线程后记概述跨平台的GUI工具库&#xff0c;较为有名的当属GTK、Qt 和 wxWidgets 了。GTK是C实现的&#xff0c;由于C语言本身不支持OOP&#x…

Swift 中使用 SQLite——修改和删除数据

本文主要介绍在SQLite中修改数据、删除数据&#xff1a; 更新记录 /// 将当前对象信息更新到数据库 /// /// - returns: 是否成功 func updatePerson() -> Bool {guard let name name else {print("姓名不能为空")return false}if id < 0 {print("id 不…

用python3实现指定目录下文件sha256及文件大小统计

有时会统计某个目录下有哪些文件&#xff0c;每个文件的sha256及文件大小等相关信息&#xff0c;这里用python3写了个脚本用来实现此功能&#xff0c;此脚本可跨平台&#xff0c;同时支持windows和linux&#xff0c;脚本(get_dir_file_info.py)内容如下&#xff1a; import os…

Swift 中使用 SQLite——新增数据

本文重点介绍两个方面&#xff0c;1、新增数据&#xff0c;2、获取自动增长 ID。 建立 Person.swift 数据模型 /// 个人模型 class Person: NSObject {// MARK: - 模型属性/// 代号var id: Int64 0/// 姓名var name: String?/// 年龄var age 0/// 身高var height: Double …

投稿2877篇,EMNLP 2019公布4篇最佳论文

整理 | AI科技大本营&#xff08;ID:rgznai100&#xff09;近日&#xff0c;自然语言处理领域的顶级会议之一EMNLP 2019公布了年度最佳论文。EMNLP是由国际语言学会&#xff08;ACL&#xff09;下属的SIGDAT小组主办的自然语言处理领域的顶级国际会议&#xff0c;是自然语言算法…

对象检测工具包mmdetection简介、安装及测试代码

mmdetection是商汤和港中文大学联合开源的基于PyTorch的对象检测工具包&#xff0c;属于香港中文大学多媒体实验室open-mmlab项目的一部分。该工具包提供了已公开发表的多种流行的检测组件&#xff0c;通过这些组件的组合可以迅速搭建出各种检测框架。 mmdetection主要特性&am…

(转)eclipse 代码自动补全

转自&#xff1a;http://blog.csdn.net/yushuwai2010/article/details/11856129 一般默认情况下&#xff0c;Eclipse的代码提示功能是比MicrosoftVisualStudio的差很多的&#xff0c;主要是Eclipse本身有很多选项是默认关闭的&#xff0c;要开发者自己去手动配置。如果开发者不…

swift 多线程GCD和延时调用

GCD 是一种非常方便的使用多线程的方式。通过使用 GCD&#xff0c;我们可以在确保尽量简单的语法的前提下进行灵活的多线程编程。在 “复杂必死” 的多线程编程中&#xff0c;保持简单就是避免错误的金科玉律。好消息是在 Swift 中是可以无缝使用 GCD 的 API 的&#xff0c;而且…

目标检测算法Faster R-CNN简介

在博文https://blog.csdn.net/fengbingchun/article/details/87091740 中对Fast R-CNN进行了简单介绍&#xff0c;这里在Fast R-CNN的基础上简单介绍下Faster R-CNN。 目标检测领域从R-CNN开始&#xff0c;通过引入卷积神经网络取得了很多突破性的进展&#xff0c;但是始终未能…

ICCV 2019 | 加一个任务路由让数百个任务同时跑起来,怎么做到?

作者 | Gjorgji Strezoski, Nanne van Noord, Marcel Worring 译者 | 中国海洋大学李杰 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;摘要传统的多任务&#xff08;MTL&#xff09;学习方法依赖于架构调整和大型可训练参数集来联合优化多个任务。但是&#xff0c;…

DEV开发之控件NavBarControl

右键点击RunDesigner弹出如下界面鼠标先点击3或4,1&#xff0c;&#xff0c;然后点击1或2进行相应的新增或删除操作&#xff0c;3是分组&#xff0c;4是项目&#xff0c;4可以直接拖动到相应的分组3.属性caption:显示的名称4.NavBarControl 属性 PaintStyleName绘画风格&…

swift支持多线程操作数据库类库-CoreDataManager

类库方法 获取数据 executeFetchRequest(request:) 同步获取数据 var request: NSFetchRequest NSFetchRequest(entityName: "MonkeyEntity")var myMonkeys:NSArray? CoreDataManager.shared.executeFetchRequest(request)异步获取数据 executeFetchRequest(re…

目标检测(或分隔)算法Mask R-CNN简介

在博文https://blog.csdn.net/fengbingchun/article/details/87195597 中对Faster R-CNN进行了简单介绍&#xff0c;这里在Faster R-CNN的基础上简单介绍下Mask R-CNN。 Mask R-CNN是faster R-CNN的扩展形式&#xff0c;能够有效地检测图像中的目标&#xff0c;并且Mask R-CNN…

未来之城,管理者可能不是人......

大会官网 https://t.csdnimg.cn/KSTh2010 年&#xff0c;IBM 正式提出了“智慧地球”愿景。在 IBM 的设想中&#xff0c;智慧城市应该由六个核心系统组成&#xff1a;组织&#xff08;人&#xff09;、业务/政务、交通、通讯、水和能源。&#xff08;图源 | IBM 官网&#xff0…

UVa 10701 - Pre, in and post

题目&#xff1a;已知树的前根序&#xff0c;中根序遍历转化成后根序遍历。 分析&#xff1a;递归&#xff0c;DS。依据定义递归求解就可以。 前根序&#xff1a;根&#xff0c;左子树&#xff0c;右子树&#xff1b; 中根序&#xff1a;左子树&#xff0c;根&#xff0c;右子树…

图像集存储成MNIST数据集格式实现

有时会用到将一组图像存放成MNIST中那样的数据格式&#xff0c;以便于用于网络的训练和测试&#xff0c;如MNSIT中的测试集标签t10k-labels.idx1-ubyte和测试集图像t10k-images.idx3-ubyte&#xff0c;各包含了10000个样本&#xff0c;这里以此两个测试集为例详细说明下实现过程…

ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案

原来定位服务是10分钟收不到定位信息就挂起定位&#xff0c;现在变为最短3分钟&#xff0c;估计都是为了省电吧。只要你开启应用的后台定位&#xff0c;并且10分钟有一次定位&#xff0c;那么苹果就不会关闭你的线程&#xff0c;现在变成3分钟。若你的应用开启了后台定位&#…

程序员必知的20个Python技巧

作者 | Duomly 译者 | 弯月&#xff0c;编辑 | 郭芮 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;Python是一门流行且应用广泛的通用编程语言&#xff0c;其应用包括数据科学、机器学习、科学计算等领域&#xff0c;以及后端Web开发、移动和桌面应用程序等方面。…