1. public class RoleRequiredAttribute : ValidationAttribute, IClientValidatable
  2. {
  3. public string RoleIDS{ get; set; }
  4.  
  5. public string OtherProperty { get; set; }
  6.  
  7. public RoleRequiredAttribute(string roleIDs, string otherProperty)
  8. {
  9. RoleIDS = roleIDs;
  10. OtherProperty = otherProperty;
  11. }
  12.  
  13. protected override ValidationResult IsValid(object value, ValidationContext validationContext)
  14. {
  15. var property = validationContext.ObjectType.GetProperty(OtherProperty);
  16. if (property == null)
  17. {
  18. return new ValidationResult(string.Format(CultureInfo.CurrentCulture, "{0} 不存在", OtherProperty));
  19. }
  20. var otherValue = property.GetValue(validationContext.ObjectInstance, null);
  21. if (RoleIDS.Replace(",",",").Trim(',').Split(',').Contains(otherValue) && value == null)
  22. {
  23. return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
  24. }
  25. return null;
  26. }
  27.  
  28. public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
  29. {
  30. var rule = new ModelClientValidationRule
  31. {
  32. ValidationType = "role",
  33. ErrorMessage = FormatErrorMessage(metadata.GetDisplayName())
  34. };
  35. rule.ValidationParameters["property"] = Newtonsoft.Json.JsonConvert.SerializeObject(new { key = OtherProperty, val = RoleIDS });
  36.  
  37. yield return rule;
  38. }
  39. }
  1. (function ($) {
  2. $.validator.addMethod("role", function (value, element, param) {
  3. if (value.replace(/(^s*)|(s*$)/g, "").length != 0) {
  4. return true;
  5. }
  6. else {
  7. var obj = JSON.parse(param);
  8. var kv = $("#" + obj["key"]).val();
  9. if (obj["val"].indexOf(kv) != -1) {
  10. return false;
  11. }
  12. else {
  13. return true;
  14. }
  15. }
  16. return false;
  17. });
  18. $.validator.unobtrusive.adapters.addSingleVal("role", "property");
  19.  
  20. )(jQuery));
  1. public class MyModel
  2. {
  3.  
  4. [RoleRequired("A,B", "RoleID", ErrorMessage = "必填")]
  5. public string Email { get; set; }
  6.  
  7. public string RoleID{ get; set; }
  8. }

MVC 验证规则扩展(当RoleID 属性值为A,B 时,Email 属性必填)的更多相关文章

  1. Java反射机制调用对象的方法 —— 将一个对象的属性值赋值给另一个对象的属性

    模拟一个场景: 众所周知,EasyExcel导出Excel文档是依赖于注解完成的,在实体类需要导出的属性上面加上注解,导出的时候会自动识别该属性. 假如我们现在需要导出用户的信息,又不想污染原本的实体 ...

  2. easyui form提交时验证必填,打开时不显示必填提示

    给textbox添加required:true属性后,打开页面时整个表单都是红的,需要将其设置为提交时再验证. 解决方法:通过textbox的novalidate属性来控制是否开启验证 <inp ...

  3. js对象属性名和属性值生成新数组时都作为属性值

    const obj = { id:1, name:'zhangsan', age:18 } const arr = []; Object.getOwnPropertyNames(obj).forEac ...

  4. bootstrapValidator常用验证规则总结

    bootstrapValidator常用验证规则总结 一 .bootstrapValidator引入 在使用bootstrapValidator前我们需要引入bootstrap和bootstrapVa ...

  5. MVC验证05-自定义验证规则、验证2个属性值不等

    原文:MVC验证05-自定义验证规则.验证2个属性值不等 本文体验2个属性值不等.即当一个属性输入值,另外一个属性输入的值不能和第一个属性值相等.相关文章包括: MVC验证01-基础.远程验证   M ...

  6. MVC数据验证原理及自定义ModelValidatorProvider实现无编译修改验证规则和错误信息

    Asp.net MVC中的提供非常简单易用的数据验证解决方案. 通过System.ComponentModel.DataAnnotations提供的很多的验证规则(Required, StringLe ...

  7. EF里如何定制实体的验证规则和实现IObjectWithState接口进行验证以及多个实体的同时验证

    之前的Code First系列文章已经演示了如何使用Fluent API和Data Annotation的方式配置实体的属性,比如配置Destination类的Name属性长度不大于50等.本文介绍E ...

  8. Yii CModel中rules验证规则[转]

    array( array(‘username’, ‘required’), array(‘username’, ‘length’, ‘min’=>3, ‘max’=>12), array( ...

  9. jQuery.validator 验证规则详解

    前言:jQuery.validator是一款非常不错的表单验证插件,验证方式非常简单方便,它还对HTML5做了兼容处理,了解了验证规则,就基本掌握了它的使用,下面就让我一一道来 jQuery.vali ...

随机推荐

  1. php 跨域请求

    执行要在跨域请求的服务器端对应的代码上增加下面的代码 <?php namespace Admin\Controller; // 指定允许跨域访问 header('Access-Control-A ...

  2. 刚下了VS2010不会用,求大神指点迷津

    刚下了VS2010不会用,求大神指点迷津 [菌菌][C语言MOOC]第七周计算分数精确值(10分) thinkphp3.1Calltoamemberfunctionget()onnull java提示 ...

  3. waitGroup的使用

    package main import ( "fmt" "sync" "time" ) func main() { var wg sync. ...

  4. JS 最简单数组去重

    ,,,,])) // 再把set转变成array console.log(newArr) // [1,2,3,4]

  5. redis cluster最简配置

    redis cluster最简配置 master配置如下:(默认6379端口) bind 127.0.0.1 port 6379 timeout 0 databases 16 Master的redis ...

  6. Android作业

    一.设置跑马灯功能   使用滚动字幕显示标题“请选择你喜欢哪种花” <?xml version="1.0" encoding="utf-8"?>&l ...

  7. node,npm,vue的全局升级

    pc环境:windows 10, OS:win32, Arch:x64 1.升级node.js到最新 ⑴.别人成功的方法: . 第一步 npm -g install n //此处可以加上 --forc ...

  8. python day31--网络编程,tcp,udp的指令,及黏包

    一.TCP tcp中遇到黏包会让数据传输完. server import socket sk=socket.socket() sk.bind(('127.0.0.1',8090)) sk.listen ...

  9. linux 保存git的账号密码

    今天在弄jenkins一建发版,遇到了git下载每次都要输入账号密码,所以百度一下,使用一下方法,搞定 一.通过文件方式 1.在~/下, touch创建文件 .git-credentials, 用vi ...

  10. word中编辑论文公式对齐问题

    这里只说在word中编辑公式时,公式居中,编号右对齐的情况. 在编辑公式时,我平时就是右对齐,然后通过敲击空格键进行公式的居中,然而这样并不美观.所以接下来学习一下: 1)首先打开视图-->标尺 ...