爱上MVC3~为下拉列表框添加一个自定义验证规则

时间:2022-05-25 03:34:52

回到目录

开发它的原因:

之前的同事,也是我的哥们,问我下拉列表框是否可以支持验证,这个问题看似简单,但确实MVC里有为我们提供,所以,只能自己写个扩展了,即自己写一个attribute特性,让它继承ValidationAttribute,使它可以与其它MVC提供的验证一起使用.

MVC验证是怎么运行的:

在MVC的特性验证,很方便,很直接,它无论是在数据安全性上还是在页面表现上都做的不错,它的运行机制是这样的,前台表单验证规则有个名称,然后前台JS有对这个规则编写的代码,用来控制前台HTML标记的显示,而后台主要是生成验证规则和向前台参数赋值的。事实上,我们要知道的是,MVC验证不是简单的后台验证,它还有对前台页面的控制的JS部分,它一般被继承到了jquery.validate.min.js里了,如果我们要是自己开发一套验证规则,也需要自己的JS库与相配合。

说干就干

C#部分:

   [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public sealed class NotDefaultValueAttribute : ValidationAttribute, IClientValidatable
{
public string InputString { get; set; }
public NotDefaultValueAttribute()
{
ErrorMessage = "请选其中一项";
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
ModelClientValidationRule rule = new ModelClientValidationRule
{
ValidationType = "notdefaultvalue",
ErrorMessage = FormatErrorMessage(metadata.GetDisplayName())
};
rule.ValidationParameters["inputstring"] = InputString; yield return rule;
}
public override bool IsValid(object value)
{
if (value == null)
return true;
string inputString = (string)value;
if (inputString.Contains(InputString))
{
return false;
}
return true;
}
}

为viewmodel添加特性

  public class TestModel
{
[Required]
[Display(Name = "用户名")]
public string UserName { get; set; } [Required]
[DataType(DataType.Password)]
[Display(Name = "密码")]
public string Password { get; set; } [Display(Name = "爱好")]
[NotDefaultValue(InputString = "")]/*如果用户选择为1,则验证不通过*/
public IEnumerable<SelectListItem> Liker { get; set; }
}

在前面添加相对应的JS代码,建议将自定义的JS库放在一个单独的文件里,这样扩展性更强一些。

    $.validator.addMethod('notdefaultvalue', function (value, element, param) {
if (value == false) {
return true;
}
if (value.indexOf(param) != -) {
return false;
}
else {
return true;
}
});
$.validator.unobtrusive.adapters.addSingleVal('notdefaultvalue', 'inputstring');

OK,现在就可以运行我们的程序了,看看效果吧

aaarticlea/png;base64,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" alt="" />

怎么样,像这种扩展,我们还可以写很多,举一反三吧,呵呵!

回到目录

爱上MVC3~为下拉列表框添加一个自定义验证规则的更多相关文章

  1. Jquery Validate自定义验证规则,一个汉字等于两个字符长度

    使用Jquery validate时写的一些东西,在这里做个笔记 在使用 Jquery validate 的minlength和maxlength进行文本框内容长度验证的时候,对于一个汉字的长度检测结 ...

  2. Jquery Validate 相关参数及常用的自定义验证规则

    一.官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 二.默认校验规则 1 2 3 4 5 6 7 8 9 10 1 ...

  3. validatebox自定义验证规则以及使用

    //===============jsp======state==== //开启验证 <script  type="text/javascript"> ​​​​​​​y ...

  4. Django【第16篇】:Django之Form组件自定义验证规则

    自定义验证规则以及中间件简单介绍 1.python2和python3中的区别 对于python2内置的字符串类型有str和unicode 比如:"abc"是字符串,u"你 ...

  5. yii2中自定义验证规则rules

    作者:白狼 出处:www.manks.top/article/yii2_custom_rules 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追 ...

  6. yii2中的rules 自定义验证规则详解

    yii2的一个强大之处之一就是他的Form组件,既方便又安全.有些小伙伴感觉用yii一段时间了,好嘛,除了比tp"难懂"好像啥都没有. 领导安排搞一个注册的功能,这家伙刷刷刷的又是 ...

  7. laravel5&period;5 自定义验证规则——手机验证RULE

    相信很多小伙伴和我一样烦恼,laravel没有自带手机号的验证,每次验证手机号都要写正则这类的规则,每次都是repeat yourself!违背了编码的一个原则,就是Don't repeat your ...

  8. easyui的validatebox重写自定义验证规则的几个实例

    validatebox已经实现的几个规则: 验证规则是根据使用需求和验证类型属性来定义的,这些规则已经实现(easyui API): email:匹配E-Mail的正则表达式规则. url:匹配URL ...

  9. zabbix添加对自定义无规则的关键日志文件的监控

    zabbix添加对自定义无规则日志文件的监控 项目背景及思路: zabbix自带有针对日志文件的监控,自带的监控只能监控到指定文件或者正则匹配的固定日志文件,但当需要监控的文件名没有规律的时候自带监控 ...

随机推荐

  1. KBMMW 4&period;92&period;00 发布

    We are happy to announce the release of kbmMW Professional and Enterprise Edition. Yet again kbmMW c ...

  2. Loadrunner中参数化实战(9)-Unique&plus;Once

    参数化数据30条: 脚本如下,演示登录,投资,退出操作是,打印手机号: 首先验证Vugen中迭代: Unique+Once 设置迭代4次Action 结果如下:

  3. C语言 malloc、calloc、realloc的区别

    三个函数的申明分别是: void* malloc(unsigned size); void* realloc(void* ptr, unsigned newsize); void* calloc(si ...

  4. &lbrack;git&rsqb;git忽略文件

    可以通过创建~/.gitignore_global并添加到git全局配置以减少每层目录的规则重复定义.使用命令git config --global core.excludesfile ~/.giti ...

  5. yii2复选框

    Yii2复选框的具体使用方法如下,以商品中的品牌为例在页面显示 第一种方法:使用ActiveForm::checkBoxlist()(这种方法可以把后台获取到的数据都生成复选框),具体使用如下: &l ...

  6. 黄聪:WordPress固定链接设置的几种方法

    wordpress固定链接设置的一些参数: %year%:基于文章发布的年份,比如2010: %monthnum%:基于文章发布的月份,比如01: %day%:基于文章发布当日,比如06: %hour ...

  7. vue2&period;0&plus;element&plus;node&plus;webpack搭建的一个简单的后台管理界面

    闲聊: 今天是六一儿童节哟,小颖祝大家节日快乐哈哈哈.其实这个demo小颖断断续续做了将近两个礼拜了,心塞的,其实这个也没有多难,主要是小颖有点最近事情有点多,所以就把这个一直拖着,今天好不容易做好了 ...

  8. 010 Editor Mac安装教程

    010 Editor mac版是mac上一款非常强大的十六进制编辑器,可以帮助用户进行编辑十六进制和二进制,可选择自己需要的进制进行编辑,还可对任何的文件进行编辑:软件内置了强大的模块.脚本操作,只需 ...

  9. c&num; winform窗体如何设置才可以不能随意拖动大小

    执行以下两个步骤,能够禁止用户改变窗体的大小 (一)步骤1 设置窗体的FormBorderStyle属性为下列五个值中的任意一个 None:将窗口设置为无边框.无标题栏.用户无法改变窗口的大小,也无法 ...

  10. 分布式管理GIT命令总结&lpar;转载&rpar;

    GIT是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...