mvc model类添加验证功能
ASP.NET MVC3新增了许多新特性,IValidatableObject接口就是新增的诸多特性之一。ASPNET MBC3该书中是这样描述的:IValidatableObject 接口允许执行 Model 水平的验证,并且允许你提供整个模型状态的验证错误信息,或者基于 Model 的两个属性。当 Model 绑定的时候,MVC3 从 IValidatableObject 接收错误信息,在视图中使用内建的 HTML 助手时,将会自动标识或者高亮受影响的字段。
可能有人会问了,Mvc2中可以使用自定义验证来对模型进行验证,为什么mvc3中又新增了IValidatableObject这个接口呢?
不错,我们是可以通过继承ValidationAttribute类并且重写它的IsValid方法来自定义验证,但是这中做法有个局限性,那就是如果我需要验证模型的各个属性之间的逻辑关系,例如:我们有一个商品模型,我们要求这个模型的出库数量不能大于库存数量,那么自定义验证就显得不是那么给力了,这时候我们就需要ValidationAttribute接口了。
首先我们这个商品模型Product.cs需要实现IValidatableObject接口,然后实现Validate这个方法。
1:medel 类
public class Product : IValidatableObject{/// <summary>/// 产品名称/// </summary>[DisplayName("产品名称")][AllowHtml]//允许输入html脚本[Required]public String Name { get; set; }/// <summary>/// 库存数量/// </summary>[DisplayName("库存")][Required]public int Inventory { get; set; }/// <summary>/// 销售数量/// </summary>[DisplayName("售出")][Required]public int Shipping { get; set; }public IEnumerable<ValidationResult> Validate(ValidationContext validationContext){Type type = typeof(Product);EntityAttribute entityAttribute = new EntityAttribute(type);PropertyInfo[] PropertyInfos = type.GetProperties();string shippingDisplayName = entityAttribute.GetDisplayAttributeName("Shipping");string inventoryDisplayName = entityAttribute.GetDisplayAttributeName("Inventory");if (Shipping > Inventory){yield return new ValidationResult(string.Format("{0}数量不能大于{1}数量", shippingDisplayName, inventoryDisplayName), new string[] { "Shipping" });}}}
2:属性帮助类:
/// <summary>/// 获取 Model 的 Attribute DisplayName/// </summary>public class EntityAttribute{private Type type;public EntityAttribute(Type type){this.type = type;}public string GetDisplayAttributeName(string propertyName){var propertyInfo = type.GetProperty(propertyName);object[] attrs = propertyInfo.GetCustomAttributes(typeof(DisplayNameAttribute), true);return (attrs[0] as DisplayNameAttribute).DisplayName;}}
3:cshtml代码
@model vue3mvc.Models.Product
@{ViewData["Title"] = "MyProduct";
}
<h1>MyProduct</h1><h4>Product</h4>
<hr />
<div class="row"><div class="col-md-4"><form asp-action="MyProduct" asp-controller="Home"><div asp-validation-summary="ModelOnly" class="text-danger"></div><div class="form-group"><label asp-for="Name" class="control-label"></label><input asp-for="Name" class="form-control" /><span asp-validation-for="Name" class="text-danger"></span></div><div class="form-group"><label asp-for="Inventory" class="control-label"></label><input asp-for="Inventory" class="form-control" /><span asp-validation-for="Inventory" class="text-danger"></span></div><div class="form-group"><label asp-for="Shipping" class="control-label"></label><input asp-for="Shipping" class="form-control" /><span asp-validation-for="Shipping" class="text-danger"></span></div><div class="form-group"><input type="submit" value="Create" class="btn btn-primary" /></div></form></div>
</div><div><a asp-action="Index">Back to List</a>
</div>@section Scripts {@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}}
mvc model类添加验证功能相关推荐
- thinkphp回调的php调用db类,请问thinkphp中model类自动完成功能 回调函数能不能获取其他字段的值?...
http://www.thinkphp.cn/api/source-class-Model.html#975 protected function _validationFieldItem($data ...
- MVC Model验证总结 @Html.ValidationSummary(true)
原文:https://blog.csdn.net/wybshyy/article/details/52064253 ASP.NET MVC3中的Model是自验证的,这是通过.NET4的System. ...
- PHP的ECSHOP商城的改造成MVC添加商品功能总结
PHP的ECSHOP商城的改造成MVC添加商品功能总结原始的ECSHOP商城不是MVC的架构,改造成MVC架构. admin后台 Platform =back,登录页面进去是index.php,里面是 ...
- php 自动验证表单类,thinkPHP 表单自动验证功能
昨天晚上我们老大叫我弄表单自动验证功能,愁了半天借鉴了好多官网的知识,才出来,诶,总之分享一下我自己的成果吧! thinkphp 在Model基类为我们定义了自动验证的函数和正则表达式,我们只需要在对 ...
- 【转】【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式
本文属转载,来源:http://www.byywee.com/page/M0/S868/868615.html关于Model验证官方资料:http://msdn.microsoft.com/zh-cn ...
- python 装饰器实现事件绑定_Python装饰器实现几类验证功能做法实例
最近新需求来了,要给系统增加几个资源权限.尽量减少代码的改动和程序的复杂程度.所以还是使用装饰器比较科学 之前用了一些登录验证的现成装饰器模块.然后仿写一些用户管理部分的权限装饰器. 比如下面这种 调 ...
- ASP.NET MVC 4 (十) 模型验证
模型验证是在模型绑定时检查从HTTP请求接收的数据是否合规以保证数据的有效性,在收到无效数据时给出提示帮助用户纠正错误的数据. 显式模型验证 验证数据最直接的方式就是在action方法中对接收的数据验 ...
- [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序使用高级功能...
这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第十二篇:为ASP.NET MVC应用程 ...
- MVC HtmlHelperTModel 类
HtmlHelper<TModel> 类 .NET Framework 4 表示支持在强类型视图中呈现 HTML 控件. 继承层次结构 System.Object System.Web.M ...
最新文章
- Spring源码分析【6】-ThreadLocal的使用和源码分析
- CodeforcesBeta Round #19 D. Points 离线线段树 单点更新 离散化
- 网易云音乐音视频算法的 Serverless 探索之路
- 请编写一个 C 函数,该函数给出一个字节中8二进制数中为1的个数
- JeecgBoot 3.1.0 版本发布,基于代码生成器的企业级低代码平台
- 这两天有点热吆,star直线上涨!~Jeecg Boot
- java nextbyte()_java.util.Scanner.hasNextByte()方法实例
- Node.js下载安装及各种npm、cnpm、nvm、nrm配置(保姆式教程—提供全套安装包)—cnpm的安装与配置(3)
- 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数
- javaweb实训第一天作业练习
- java createcustomcursor,CustomCursor插件:自定义你的鼠标光标
- mongodb导入bson文件_分布式文档存储数据库之MongoDB备份与恢复
- GNN + Zero-shot
- 阿里巴巴“牛逼”了,申请“行政干预”区块链专利
- 第十七届全国大学生智能汽车竞赛讯飞-家庭服务机器人挑战赛全国选拔赛规则
- 微软2019 Windows 10更新五月版:10个不可错过的新功能
- tensorflow安装 报错ConnectionResetError(10054, ‘远程主机强迫关闭了一个现有的连接。
- 图形推理题 答案揭晓
- python-matplotlib-箱线图为不同的箱体设置不同颜色
- 关于DBA或SA这个职业的讨论
热门文章
- 星载激光雷达的数据读取与显示
- [转载]王淮:我在Facebook的十点经验分享
- Framework 重装
- 【Java8 新特性 4】java8 optional
- 【机器学习】SVM支持向量机在手写体数据集上进行二分类、采⽤ hinge loss 和 cross-entropy loss 的线性分类模型分析和对比、网格搜索
- 生信人一口气搞定SCI作图与数据处理的技巧,就靠这个免费在线工具了!
- 关于wampserver图标变绿的问题
- 宝可梦探险寻宝料理php,宝可梦探险寻宝料理怎样搭配_宝可梦探险寻宝料理配方搭配方式详解_玩游戏网...
- 面向对象期末任务第二阶段
- 二代身份证号码验证器[超简单]